Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 收集许多';计数';在一个查询中?_Ruby On Rails - Fatal编程技术网

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上的组连接起来,然后选择计数作为额外字段。不过,它的性能不如计数器缓存