Проблема, с которой я сталкиваюсь, такова: сортируемая модель - это SchoolClass, который имеет студентов, которые, в свою очередь, имеют проекты, и каждый проект имеет дату окончания.Мне нужно отсортировать SchoolClasses четырьмя способами: сначала по самой ранней сортировке end_date проекта по возрастанию и по убыванию, а затем по последней сортировке end_date проекта по возрастанию и убыванию.Имеет ли это смысл?
class SchoolClass < ActiveRecord::Base
has_many :students
end
class Student < ActiveRecord::Base
has_many :projects
belongs_to :school_class
end
class Project < ActiveRecord::Base
belongs_to :student
end
Единственный способ, которым я могу думать об этом, - это очень грубая сила, предполагающая наличие в модели SchoolClass методов, которые возвращают самые ранние и самые поздние даты проекта для этого экземпляра, например так:
students.collect(&:projects).flatten.select(&:end_date).sort.last
, чтобы найти последнюю дату окончания проекта для этого класса, а затем извлечь все классы базы данных и отсортировать их этим методом.Конечно, это просто ужасно, правда?Я действительно хотел бы найти способ рельсов, чтобы получить этот порядок (возможно, с областями применения?).Я думал, что-то вроде SchoolClasses.joins(:students).joins(:projects).order('projects.end_date ASC')
может сработать, но это приведет к сбою рельсов (и, глядя на это, логика в любом случае неверна, я думаю).
Есть предложения?