1

假设你有这个:

class Event < ActiveRecord::Base
  has_many :orders
end

class Order < ActiveRecord::Base
  belongs_to :event
end

对于一些管理界面,我想用这些数据点呈现一个表:

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

“过去 2 周”可以被创建_at > 2.weeks.ago

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

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

4

1 回答 1

0

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

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

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

更多细节可以在急切加载文档中找到。

于 2012-07-21T01:29:35.437 回答