【发布时间】:2016-02-15 14:18:56
【问题描述】:
我遇到了一个奇怪的问题。我试图用谷歌搜索,但我可能没有使用正确的措辞(我是 RoR 的新手)。
我正在通过我的一个模型的范围使用一些嵌套的急切加载。所以我有这样的事情:
scope :includes_all, lambda {includes(
:buggy_relation,
:another_relation,
an_attribute: [:first_attribute, :second_attribute])}
其中 :buggy_relation 在同一模型中被声明为类似这样的内容:
has_many :buggy_relation, -> {order(:order_index)}, class_name: 'SomeClass'
所以,关键是,只要我的includes() 语句中没有an_attribute,SQL 请求看起来是正确的,并且我可以在 SomeClass.order_index 上看到 ORDER BY 语句。但是,一旦我用an_attribute: [:first_attribute, :second_attribute] 添加嵌套加载,:buggy_relation 的顺序就不再考虑在内。错误的关系显然已加载,但没有说明相应的 ORDER BY 导致订单不被尊重。
不当行为的一个例子是使用 cmets 发表博客文章:
#EXPECTED
post -> comment 1
-> comment 2
-> comment 3
#OBTAINED
post -> comment 2
-> comment 3
-> comment 1
如果您对此有任何提示...
【问题讨论】:
标签: ruby-on-rails ruby-on-rails-4 activerecord