0

我知道“胖模型/瘦控制器”和“永远不要将逻辑放在视图中”的建议;但是,它会帮助我从一个例子中学习。在下文中,重写代码以使查询不在视图中的最佳方法是什么?

模型

 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 %>
4

1 回答 1

3

这完全取决于您想要显示的内容,但最直接的选择是利用您指定的关联:

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

然后在您的控制器中,您可以使用预先加载来优化您的 SQL 调用。

@orders = Order.all(:include => :products)
于 2012-06-29T14:34:00.120 回答