0

我意识到“胖模型/瘦身控制器”和“从不把逻辑放在视图中”的建议;但是,它会帮助我从一个例子中学习。在下面,重写代码以便查询不在视图中的最佳方法是什么?Ruby on Rails - 从视图到模型重构ActiveRecord查询

型号

class Product < ActiveRecord::Base 
    belongs_to :order 
end 

class Order < ActiveRecord::Base 
    has_many :products 
end 

控制器

@orders = Order.all 

查看

<% @orders.each do |o| %> 
<%= Product.where("order_id = ?", o.id).count %> 
<% end %> 
+0

没有必要为您显示的片段。 –

回答

3

这取决于什么要显示,但直接的选择就是把你所指定的关联优势:

<% @orders.each do |o| %> 
    <%= o.products.count %> 
<% end %> 

然后在你的控制器,你可以使用eager loading优化您的SQL调用。

@orders = Order.all(:include => :products) 
+0

虽然 - 是否取决于一些因素,这是否属于控制器是有争议的。它可能属于映射本身,它可能属于模型类方法等。 –

+0

它绝对取决于,同意。 – muffinista

+0

有趣的是,谢谢你的答案。我的印象是它会更切割和干燥。谢谢你的帮助! – diasks2