我遇到了一个奇怪的问题。我试图谷歌,但我可能没有使用正确的措辞(我在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'
所以,重点是,只要我的an_attribute
语句中没有includes()
,SQL请求看起来是正确的,我可以在SomeClass.order_index上看到ORDER BY语句。但是,只要我使用an_attribute: [:first_attribute, :second_attribute]
添加嵌套加载,就不再考虑:buggy_relation
的顺序。有问题的关系显然被加载了,但没有相应的ORDER BY声明导致命令不被尊重。
不良行为的一个例子是有一篇评论的博客文章:
#EXPECTED
post -> comment 1
-> comment 2
-> comment 3
#OBTAINED
post -> comment 2
-> comment 3
-> comment 1
如果您对此有任何暗示......
答案 0 :(得分:0)
因此,您可以通过评论在任何地方执行以下操作
post.comments.order(:order_index).each do |comments|