Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/109.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:使用has\u many/belient\u关系的订单_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails Rails:使用has\u many/belient\u关系的订单

Ruby 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

我想知道是否可以使用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 = 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