Подтвердить что ты не робот

Rails: порядок с использованием отношения has_many/belongs_to

Мне было интересно, можно ли использовать метод 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)

спасибо.

4b9b3361

Ответ 1

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

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

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

Ответ 2

В 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

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