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