[英] What's the difference between “includes” and “preload” in an ActiveRecord query?
• ruby-on-rails我很难找到ActiveRecord对象的includes()和preload()的比较.有人能解释这两者的区别吗?
我很难找到ActiveRecord对象的includes()和preload()的比较.有人能解释这两者的区别吗?
Rails有两种避免n+1问题的方法.一个涉及创建一个基于连接的大型查询来获取关联,另一个涉及对每个关联进行单独的查询.
当你做includes
次时,rails会决定使用哪种策略.它默认为单独的查询方法(预加载),除非它认为您正在使用条件或顺序中的关联中的列.因为这只适用于连接方法,所以它使用了连接方法.
Rails的启发法有时会出错,或者您可能有特定的原因 Select 一种方法而不是另一种.preload
(及其配套方法eager_load
)允许您指定希望rails使用的策略.