Ruby on rails 收集许多';计数';在一个查询中?
我需要做以下工作:Ruby on rails 收集许多';计数';在一个查询中?,ruby-on-rails,Ruby On Rails,我需要做以下工作: <% for customer in @customers do %> <%= customer.orders.count %> <% end %> 这会使服务器紧张,创建n个查询,其中n=客户数量 如何在一次查询中与客户一起加载这些计数?谢谢。您可以使用热切加入: @customers = Customers.paginate :page => 1, :per_page => 20, :include => [
<% for customer in @customers do %>
<%= customer.orders.count %>
<% end %>
这会使服务器紧张,创建n个查询,其中n=客户数量
如何在一次查询中与客户一起加载这些计数?谢谢。您可以使用热切加入:
@customers = Customers.paginate :page => 1, :per_page => 20, :include => [:orders]
通过向联接指定:include参数,将预加载订单,从而防止出现n+1问题。然后可以使用customer.orders.length
如果加载所有这些订单占用的内存太多,那么您应该浏览计数器\u缓存
。这是为了保持关联模型上的模型计数:
class Order
belongs_to :customer, :counter_cache => true
end
当从关联中添加或删除订单时,这将增加或减少所属客户
记录上的订单计数
字段
如果不想使用计数器缓存,则需要自定义finder SQL,它将orders表和orders.customer\u id上的组连接起来,然后选择计数作为额外字段。不过,它的性能不如计数器缓存