Ruby on rails Rails-ActiveRecord:has\u当使用:includes查询时,没有加载多个关联
请查看此基本关联设置(Rails 4.2.1): 但是:添加一个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预加载/缓存父.
.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