У меня есть то, что мне показалось простым требованием: я хочу отсортировать родительский класс по атрибуту его дочернего класса.
class owner
has_many :tasks
end
class task
belongs_to :owner
end
Теперь я хочу отсортировать владельцев по дате выполнениядля их задач, так что владелец, у которого есть задача с «ближайшей» датой исполнения, является первым, и т. д.
Я могу сделать это в Ruby с сортировкой массива, но мои наборы записей огромны, и мне нужно сделатьэто с AR / СУБД ..
ОБНОВЛЕНИЕ:
Пока я размышлял над этим вопросом, часть решения пришла мне в голову, хотя я не знаю, как реализовать в AR.
Чтобы отсортировать владельцев по их задачам, релевантна только одна задача (для каждого владельца), а именно та, которая имеет ближайший срок выполнения.
Как бы я использовал AR, чтобы получить все мои данныевладельцы, отсортированные по их заданию с ближайшей датой оплаты?
ОБНОВЛЕНИЕ 2:
Task.order("due_date DESC").maximum("due_date", :group => 'owner')
Фактически передадут мне объекты владельца, отсортированные в правильном порядкекак часть заказанного хэша ([owner] => "due_date").Ура!Единственная проблема сейчас заключается в том, как мне сказать AR, чтобы eager_load все связанные задачи с объектом владельца.Потому что в этот момент каждый раз, когда я вызываю запрос
owner.tasks.each do |t|
, он запускает запрос.
Любая помощь приветствуется, я схожу с ума от этой (простой ??) проблемы,
Эрвин