Rails 急切加载

Posted

技术标签:

【中文标题】Rails 急切加载【英文标题】:Rails eager loading 【发布时间】:2010-05-24 10:25:39 【问题描述】:

嗨, 我有一个测试模型,它有_很多问题,还有一个问题,它有_很多答案...... 当我使用 :include => [:questions, :questions => :answers] 对测试进行查询时,ActiveRecord 会再进行两个查询以获取问题然后获取答案 - 它不会加入它们! !当我使用 :joins ActiveRecord 进行查询时,会进行查询,但稍后当我需要 Test.questions 或 Test.questions.answers ActiveRecord 时会再次进行这两个额外的查询!!!后来,当我在日志中枚举问题或答案时,我看到每个对象的其他查询,但它有缓存标记...

这正常吗?

【问题讨论】:

:include => :questions => :answers 即可,无需指定:questions 两次。 类似问题***.com/questions/1208636/rails-include-vs-joins 【参考方案1】:

我同意 shteef,当您执行以下操作时会发生什么:

:include =>  :questions => :answers 

【讨论】:

以上是关于Rails 急切加载的主要内容,如果未能解决你的问题,请参考以下文章

使用 Rails 查询急切加载

实施急切加载以停止 N+1 - Rails

优化 Rails 急切加载查询以查找所有

急切加载多态

急切加载与加入获取相同吗?

如何在 has_many 关系中急切加载最新的对象?