嵌套包含

时间:2016-02-15 14:18:56

标签: ruby-on-rails ruby-on-rails-4 activerecord

我遇到了一个奇怪的问题。我试图谷歌,但我可能没有使用正确的措辞(我在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

如果您对此有任何暗示......

1 个答案:

答案 0 :(得分:0)

因此,您可以通过评论在任何地方执行以下操作

post.comments.order(:order_index).each do |comments|