Rails-使用:includes

时间:2019-04-20 11:51:09

标签: ruby-on-rails activerecord

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

class Parent < ActiveRecord::Base
  has_many :kids
end

class Kid < ActiveRecord::Base
  belongs_to :school
end

class School < ActiveRecord::Base
end

使用这些模型,下一个代码将按预期工作并保持关联loaded

parent = Parent.first
parent.kids.to_a
parent.association(:kids).loaded? # => true

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

parent = Parent.first
parent.kids.includes(:school).to_a
parent.association(:kids).loaded? # => false

在查看SQL日志时,我看到完全相同的选择查询,因此我希望关联被加载/缓存。

问题

为什么会这样?

在第一个示例中,

ActiveRecord预加载/缓存parent.kids。我想了解为什么在第二个示例中无法进行includes调用吗?

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

感谢您的帮助

P.S。

我正在使用的解决方法是手动设置association.target

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

0 个答案:

没有答案