rails 4 eager loading - 命令嵌套关联

时间:2016-07-14 13:40:45

标签: ruby-on-rails-4

我有4个模特

class A < ActiveRecord::Base 
  has_many :Bs
end 

class B < ActiveRecord::Base 
  belongs_to :A
  has_many :Cs
  has_many :Ds
end

class C < ActiveRecord::Base 
  belongs_to :B
end

class D < ActiveRecord::Base 
  belongs_to :B
end

我需要急于加载A,并获得所有嵌套关联。所以来自A:

eager_load(Bs: [:Cs, :Ds]).where('id=?',id).to_a

现在我想通过热切加载来订购B记录。我试图通过这样的关联添加订单:

class A < ActiveRecord::Base 
  has_many :Bs, -> { order("id desc") }
end 

但它不起作用。当我做

之类的事情
A.first.bs

B记录不是由id desc命令的。

你可以请一下这个建议吗?

感谢。

1 个答案:

答案 0 :(得分:1)

我还没有对此进行过测试,但您可以按照ID或您喜欢的任何其他字段订购Bs

eager_load(Bs: [:Cs, :Ds]).where('id=?',id).order('Bs.id DESC')

另一种选择是在模型上设置默认范围,如下所示:

def self.default_scope
  order(id: :desc)
end