сортировать список объектов по свойству связанного объекта - PullRequest
3 голосов
/ 13 мая 2009

Можно ли отсортировать список объектов по свойству связанного объекта?

Например, со следующим классом

class RosterSlot < ActiveRecord::Base
  belongs_to :event
  belongs_to :skill
  belongs_to :person
end

Я хочу сделать что-то вроде RosterSlot.find (: all,: order => skill.name)

, что означает, что activerecord необходимо выполнить объединение и заказ.

Есть идеи?

Ответы [ 2 ]

4 голосов
/ 13 мая 2009

Да, вы можете использовать опцию: include для объединения.

RosterSlot.find(:all, :include => [:skill], :order => "skills.name ASC")

Опция: order принимает фрагмент SQL, поэтому навыки - это ссылка на имя таблицы множественной базы данных.

: include принимает массив ассоциаций активных записей.

Подробнее см. http://www.railsbrain.com/api/rails-2.3.2/doc/index.html?a=M002313&name=find.

3 голосов
/ 13 мая 2009

Вы также можете сделать это в ruby, используя метод sort.

RosterSlot.all.sort { |x,y| x.skill.name <=> y.skill.name }

Я бы лично попросил вашу базу данных выполнить сортировку, но этот метод может быть полезен при сортировке результирующего набора объектов модели, которые были возвращены через метод, отличный от ActiveRecord :: Base find.

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