Ответ 1
Вам нужно присоединиться к связанной таблице с запросом.
@result = DogTag.find(:all, :joins => :dog, :order => 'dogs.name')
Обратите внимание, что dogs
является множественным числом в выражении :order
.
Мне было интересно, можно ли использовать метод 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)
спасибо.
Вам нужно присоединиться к связанной таблице с запросом.
@result = DogTag.find(:all, :joins => :dog, :order => 'dogs.name')
Обратите внимание, что dogs
является множественным числом в выражении :order
.
В 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
Во-вторых, легче промахиваться в тестах, поскольку контроллеру не нужно знать подробности модели.