【发布时间】:2018-11-21 15:00:10
【问题描述】:
在 Rails 5 中,他们添加了 ActiveRecord 查询方法left_joins。 left_joins 和 includes 有什么区别?我一直将includes 视为左连接。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-5
在 Rails 5 中,他们添加了 ActiveRecord 查询方法left_joins。 left_joins 和 includes 有什么区别?我一直将includes 视为左连接。
【问题讨论】:
标签: ruby-on-rails activerecord ruby-on-rails-5
includes 默认在 2 个查询中加载关联数据,就像preload 一样。
但是通过额外的references 调用,它会从使用两个单独的查询切换到创建单个LEFT OUTER JOIN,例如left_joins。
参考:
Preload, Eagerload, Includes and Joins
Making sense of ActiveRecord joins, includes, preload, and eager_load
【讨论】:
.eager_load 并在一个查询中加载记录。
includes 在 where 子句中使用预先加载的表。您需要先在references 中指定它们
Foo.includes(:bars).where(bars: { baz: 'woo' })。结果和使用 eager_load 一样。
Foo.includes(:bars).where("bars.baz = 'woo'"),它将引发错误。在includes 文档中查看conditions 部分
hash 符号在没有references 调用的情况下也可以工作,所以谢谢