Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails ActiveRecord的顺序在嵌套的includes中不受尊重_Ruby On Rails_Ruby On Rails 4_Activerecord - Fatal编程技术网

Ruby on rails Rails ActiveRecord的顺序在嵌套的includes中不受尊重

Ruby on rails Rails ActiveRecord的顺序在嵌套的includes中不受尊重,ruby-on-rails,ruby-on-rails-4,activerecord,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_关系在同一模型中声明如下: has_ma

我遇到了一个奇怪的问题。我试着在谷歌上搜索一下,但我可能没有使用正确的措辞(我在RoR是个新手)

我正在通过一个模型的作用域使用一些嵌套的即时加载。所以我有这样的想法:

scope :includes_all, lambda {includes(
  :buggy_relation,
  :another_relation,
  an_attribute: [:first_attribute, :second_attribute])}
其中:buggy_关系在同一模型中声明如下:

has_many :buggy_relation, -> {order(:order_index)}, class_name: 'SomeClass'
因此,关键是,只要我的
includes()
语句中没有
a_属性
,SQL请求看起来是正确的,我就可以看到在SomeClass.ORDER_索引上完成的ORDER BY语句。但是,当我添加带有
属性的嵌套加载:[:first\u attribute,:second\u attribute]
时,就不再考虑
:buggy\u关系的顺序了。马车关系显然是加载的,但是没有相应的顺序被声明,这导致该顺序不被遵守

不当行为的一个例子是在博客上发表评论:

#EXPECTED
post -> comment 1
     -> comment 2
     -> comment 3

#OBTAINED
post -> comment 2
     -> comment 3
     -> comment 1

如果您对此有任何提示…

那么您可以在任何地方通过您的评论进行以下操作

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

是的,但是这里的想法是使用渴望加载。因此,包括。事实上,当我添加这个嵌套加载的时候,这种急切加载才起作用,它不再起作用了。订单本身运行良好是的,但是当您在视图中订单时,它已经加载,并且您可以订购它。我明白您的观点,您是对的。重点是,我并不是在寻找一个解决办法,我想知道我做错了什么,因为到目前为止,我读到的东西和我用这种关系做的一些实验,应该是可行的。另外,如果我急于加载一个应该排序(并且没有嵌套属性)的关系,然后必须对其重新排序,我会有点难过,这没有多大意义。但是如果我的用例是不存在的,并且我做的完全错误,那么我肯定会实现你的建议。