Есть ли способ в Active Record создать один запрос, который будет выполнять условное объединение для нескольких первичных ключей?
Скажем, у меня есть следующие модели:
Class Athlete < ActiveRecord::Base
has_many :workouts
end
Class Workout < ActiveRecord::Base
belongs_to :athlete
named_scope :run, :conditions => {:type => "run"}
named_scope :best, :order => "time", :limit => 1
end
С этимЯ мог бы сгенерировать запрос, чтобы получить лучшее время выполнения для спортсмена:
Athlete.find(1).workouts.run.best
Как я могу получить лучшее время выполнения для каждого спортсмена в группе, используя один запрос?
Следующее не работает, потому что оно применяет названные области действия только один раз ко всему массиву, возвращая единственное лучшее время для всех спортсменов:
Athlete.find([1,2,3]).workouts.run.best
Следующие работы.Тем не менее, он не масштабируется для большего числа спортсменов, поскольку генерирует отдельный запрос для каждого спортсмена:
[1,2,3].collect {|id| Athlete.find(id).workouts.run.best}
Есть ли способ сгенерировать одиночный запрос с использованием активной записиинтерфейс запроса и ассоциации?
Если нет, может ли кто-нибудь предложить шаблон запроса SQL, который я могу использовать для find_by_SQL?Должен признаться, я не очень силен в SQL, но если кто-то укажет мне правильное направление, я, вероятно, пойму это.