在 Rails > 3.2中是否可以向由 includes
方法生成的 join 语句添加条件?
假设我有两个模型,Person 和 Note。每个人有许多音符,每个音符属于一个人。每个音符都有一个属性 important
。
我想找到所有的人预载只有注释是重要的。在 SQL 中,这将是:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id AND notes.important = 't'
在 Rails 中,唯一类似的方法是使用 includes
(注意: joins
不会预加载注释) ,如下所示:
Person.includes(:notes).where(:important, true)
但是,这将生成以下 SQL 查询,它将返回不同的结果集:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'
请注意,第一个结果集包含所有人,第二个结果集只包含与重要注释相关联的人。
还要注意: 条件从3.1开始就不推荐使用。