有效地使用活动记录查询关联的聚合

时间:2012-07-20 18:12:10

标签: ruby-on-rails thinking-sphinx

假设你有这个:

class Event < ActiveRecord::Base
  has_many :orders
end

class Order < ActiveRecord::Base
  belongs_to :event
end

对于某些管理界面,我想渲染一个包含这些数据点的表:

事件名称,过去2周的总订单,总订单

“过去2周”可以只是create_at&gt; 2.weeks.ago

如何有效查询前20个事件并显示此数据?也就是说,我不想要N + 1 查询此页面。

这些事件目前来自ThinkingSphinx。如果它有用,我也可以使用Redis。

1 个答案:

答案 0 :(得分:0)

您可以在ActiveRecord中使用预先加载。它会将查询从N + 1减少到只有2个查询。

在您的EventsController中,您可以添加:

def index
  @events = Event.includes(:orders)
end

更多详细信息,请参阅eager loading docs