我有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命令的。
你可以请一下这个建议吗?
感谢。
答案 0 :(得分:1)
我还没有对此进行过测试,但您可以按照ID或您喜欢的任何其他字段订购Bs
:
eager_load(Bs: [:Cs, :Ds]).where('id=?',id).order('Bs.id DESC')
另一种选择是在模型上设置默认范围,如下所示:
def self.default_scope
order(id: :desc)
end