Rails: заказ с использованием отношения has_many / own_to - PullRequest
17 голосов
/ 07 октября 2009

Мне было интересно, можно ли использовать метод find для упорядочивания результатов на основе отношения has_many класса с другим классом. например,

# has the columns id, name
class Dog < ActiveRecord::Base
  has_many :dog_tags
end

# has the columns id, color, dog_id
class DogTags < ActiveRecord::Base
  belongs_to :dog
end

и я хотел бы сделать что-то вроде этого:

@result = DogTag.find(:all, :order => dog.name)

спасибо.

Ответы [ 2 ]

24 голосов
/ 04 апреля 2014

В Rails 4 это должно быть сделано так:

@result = DogTag.joins(:dog).order('dogs.name')

или с областью применения:

class DogTags < ActiveRecord::Base
  belongs_to :dog
  scope :ordered_by_dog_name, -> { joins(:dog).order('dogs.name') }
end

@result = DogTags.ordered_by_dog_name

Второе легче подделать в тестах, так как контроллер не должен знать о деталях модели.

20 голосов
/ 07 октября 2009

Вам необходимо присоединить связанную таблицу к запросу.

@result = DogTag.find(:all, :joins => :dog, :order => 'dogs.name')

Обратите внимание, что в выражении :order множественное число dogs.

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