Многоуровневая сортировка с ассоциациями - PullRequest
0 голосов
/ 23 августа 2011

Мои настройки: Rails 3.0.9, Ruby 1.9.2

Вот мои модели

class Project
  has_many :tasks
  has_many :photos

class Task
  belongs_to :project

class Photos
  belongs_to :project

Мне нужно, чтобы иметь возможность возвращать результирующий набор, отсортированный первым по проектуимя (ASC), а затем чередовать задачи и фотографии, отсортированные по дате (DESC).Вот пример вывода порядка, в котором я нуждаюсь

project: install new roof
  photo: ...(added on 7/15/11)
  task: ...(added on 7/10/11)
  task: ...(added on 7/1/11)

project: repair bathtub
  task: ... (added on 8/21/11)
  photo: ... (added on 8/20/11)
  photo: ...(added on 8/17/11)
  task: ... (added on 8/15/11)

Я предпочитаю получать весь набор результатов из ActiveRecord, а затем сортировать его в Ruby, но не знаю, как поступить, любые идеи будут высоко оценены.Спасибо.

1 Ответ

1 голос
/ 23 августа 2011

Как насчет этого?Возьмите все объекты, загруженные из БД, а затем сортируйте их с помощью Array#sort!.

# First, grab all projects and their task/photos from the DB
projects = Project.includes(:tasks, :photos).order("project_name ASC")

# Now, iterate over projects, combine tasks/photos, sort by date
projects.each do |p|
  tasks_and_photos = p.tasks + p.photos
  tasks_and_photos.sort! { |x,y| y.created_at <=> x.created_at }
  # now do something with the tasks and photos!
end

Добавьте к этому примечание, если вы не хотите использовать атрибут created_at для сортировки.Все, что вам нужно сделать, это убедиться, что у Photo и Task есть некоторый атрибут с общим именем, такой как date_added или что-то еще.Пока есть что-то с общим именем для сортировки, вы можете идти.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...