В моем приложении у меня есть три модели: рынки, сделки и пользователи. Отношения довольно просты:
class Market
has_many :users
has_many :deals
end
class User
belongs_to :market
end
class Deal
belongs_to :market
end
Теперь, чтобы упростить запрос некоторых из этих взаимосвязей, к модели Market прикреплены несколько методов:
class Market
def revenue_by_date(date)
deal = self.deals.find(:all, :select => 'id, purchased, price', :conditions => ["start_time =?", date])[0]
i = 0
if deal && deal.isMade?
i = deal.purchased * deal.price
end
return i
end
def users_for_market
return self.users.count
end
end
Итак, в моем контроллере мне нужно собрать данные, относящиеся ко всем рынкам вместе, а затем мне нужно детализировать данные в разных местах. Итак, у меня есть запрос, который выглядит так:
markets = Market.find(:all, :order => :name, :include => [:users, :deals])
Это запускает два запроса на включение, как и ожидалось, но позже в моем коде я делаю что-то вроде этого:
markets.each do |m|
m.users_for_market
m.revenue_by_date(date_var)
end
он выполняет отдельные запросы в этих методах модели. Я думал, что: include должен был заменить это?
Что я могу сделать, чтобы сократить количество запросов, которые я выполняю?