2012-07-20 1 views
1

Допустим, у вас есть это:эффективно запрашивая связанные агрегаты с активной записью

class Event < ActiveRecord::Base 
    has_many :orders 
end 

class Order < ActiveRecord::Base 
    belongs_to :event 
end 

Для некоторых админ интерфейса, я хочу, чтобы сделать таблицу с этими точками данных:

Имени события, Общее количеством заказов в последние 2 недели, общее количество заказов

«последние 2 недели» может быть просто created_at> 2.weeks.ago

Как эффективно опрашивать первые 20 событий и ди воспроизвести эти данные? То есть, я не хочу N + 1 запросов на этой странице.

События в настоящее время выходят из ThinkingSphinx. У меня также есть Редис в моем распоряжении, если это будет полезно.

ответ

0

Вы можете использовать активную загрузку в ActiveRecord. Это уменьшит запросы от N + 1 до всего лишь двух запросов.

В вашем EventsController можно добавить:

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

Более подробную информацию можно найти в eager loading docs.