Ruby on rails Rails:使用has\u many/belient\u关系的订单
我想知道是否可以使用find方法根据一个类与另一个类之间的关系对结果进行排序。e、 gRuby on rails Rails:使用has\u many/belient\u关系的订单,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,我想知道是否可以使用find方法根据一个类与另一个类之间的关系对结果进行排序。e、 g # 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
# 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, :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
class-DogTags{joins(:dog.order('dogs.name')}
结束
@结果=DogTags.ordered_by_dog_name
第二个更容易在测试中模拟,因为控制器不必知道模型的详细信息。应该是DogTag.find(:all,:joins=>:dog,:order=>'dogs.name')=)感谢您提供的解决方案。我相信你知道,但对于其他人,我发现顺序也必须是表名,也就是说,我必须将其加成:'dogs.name'而不是'dog.name'
DogTab.where(…).joins(:dog.order('dogs.name')
耶!谢谢还可以看看如何在关系本身上设置顺序:我尝试了第一个,但没有成功。取而代之的是:@result=DogTag.joins(:dog.order('name')
。我正在使用PostgreSQL,不确定它是否相关
class DogTags < ActiveRecord::Base
belongs_to :dog
scope :ordered_by_dog_name, -> { joins(:dog).order('dogs.name') }
end
@result = DogTags.ordered_by_dog_name