今天在看 web 开发敏捷之道遇到了一些问题
比如一个 Product 模型里写了一个 total_price 的方法,在 products/show.html 里是不是不能直接调 total_price() 这个方法?是不是需要在 product_helper 里写 total_price 方法,才能在 view 层里调取
In Model:
class Product < ActiveRecord::Base
has_many :line_items
def income
self.line_items.sum(:price)
end
def cost
self.line_items.sum(:cost)
end
def profit
self.income - self.cost
end
end
Then in Controller:
def show
@products = Product.all
end
And in View
<% @products.each do |product| %>
Product Name: <%= product.name %>
Product Income: <%= product.income %>
Product Cost: <%= product.cost %>
Product Profit: <%= product.profit %>
<% end %>
controller:
@products = Product
.select("id,name,sum(line_items.price) as income, sum(line_items.cost) as cost, sum(line_items.price) - sum(line_items.cost) as profit")
.joins("left join line_items on line_items.product_id = products.id")
model 中的都可以删了,其他不变。
#7 楼 @blacktulip 最近看了《Growing.Rails.Applications.in.Practice》,书里是建议 model 中只保留 关联,校验,callback 等,不要破坏 model 中定义的内容。我认为很对,在后期重构或维护他人代码时,面对众多类似 lz 写的方法,真让人手足无措呀。
你不知道哪里用了这个方法,而它只做了一件是,而这一件事又不该这么做。