首先让我解释一个例子:
在模型:
中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
然后在控制器:
def show
@products = Product.all
end
在视图中:
<% @products.each do |product| %>
Product Name: <%= product.name %>
Product Income: <%= product.income %>
Product Cost: <%= product.cost %>
Product Profit: <%= product.profit %>
<% end %>
从查看调用模型方法是一种好习惯吗?
当我搜索它时,我发现许多人说从视图调用模型方法或访问数据库不是一个好习惯。
另一方面,其他一些人说不要调用类方法或任何方法从视图中更新数据库,但是你可以访问任何只检索数据的方法。
那么,这段代码是一个好习惯吗?
答案 0 :(得分:8)
只要调用不会更改数据,从视图调用object-methods / attributes就完全没问题了。我的意思是,给读者/读者打电话。不好的做法是调用/调用更新/删除数据的方法。不要打电话给塞特犬。
此外,如果涉及任何复杂的计算,请求助手。
答案 1 :(得分:3)
由于您的方法需要访问line_items
关联,为了避免N + 1问题并从视图中调用数据库查询,我建议您在line_items
操作中使用show
获取includes
{1}}:
def show
@products = Product.includes(:line_items)
end
通过这种调整,我认为可以在视图中调用这些方法。