Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/65.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:has\u当使用:includes查询时,没有加载多个关联_Ruby On Rails_Activerecord - Fatal编程技术网

Ruby on rails Rails-ActiveRecord:has\u当使用:includes查询时,没有加载多个关联

Ruby on rails Rails-ActiveRecord:has\u当使用:includes查询时,没有加载多个关联,ruby-on-rails,activerecord,Ruby On Rails,Activerecord,请查看此基本关联设置(Rails 4.2.1): 但是:添加一个.includes(:school)会由于某种原因阻止加载/缓存关联 parent = Parent.first parent.kids.includes(:school).to_a parent.association(:kids).loaded? # => false 查看SQL日志,我看到了完全相同的select查询,因此我希望加载/缓存关联 问题 为什么会这样 在第一个示例中,ActiveRecord预加载/缓存父.

请查看此基本关联设置(Rails 4.2.1):

但是:添加一个
.includes(:school)
会由于某种原因阻止加载/缓存关联

parent = Parent.first
parent.kids.includes(:school).to_a
parent.association(:kids).loaded? # => false
查看SQL日志,我看到了完全相同的select查询,因此我希望加载/缓存关联

问题 为什么会这样

在第一个示例中,ActiveRecord预加载/缓存父.kids。我想了解为什么在第二个示例中不可能使用
includes
call

对我来说,一个理想的答案应该包括参考资料来源

谢谢你的帮助

附笔。 我使用的解决方法是手动设置关联。目标:

parent.association(:kids).target = parent.kids.includes(:school).to_a

正确的。因为您没有向父变量添加子变量。您已将其指定给一个新模型作为根模型。你想干什么?1) 家长版的孩子+学校列表?或者2)有孩子的家长列表+学校?@TomDunning“将孩子添加到家长变量”是什么意思?ActiveRecord预加载:第一个示例中的孩子。我想了解为什么在第二个示例中,不可能使用“includes”调用您这样做
kids=new\u stuff
而不是
parent=parent.first.includes(kids:[:school])
,这样您就可以访问孩子和学校信息。您给出的第二个示例创建了
kids=
,它是连接了学校的根目录下的kids,因此kids已经加载,您无法检查
kids=
上的assoc,因为kids是根目录(因此
kids.association(:kids).loaded?
简直是胡说八道。第二个例子中的
kids
你就可以了。@nsave如果你想让关联始终包含
includes
调用,也许你可以添加一个关联范围,这样关联就是带有
.includes
有很多:孩子,>{includes(:学校)}的关联)
parent = Parent.first
parent.kids.includes(:school).to_a
parent.association(:kids).loaded? # => false
parent.association(:kids).target = parent.kids.includes(:school).to_a