是否可以在 Rails > 3.2 中向方法生成的连接语句添加条件includes
?
假设我有两个模型,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'
请注意,第一个结果集包括所有人员,第二个结果集仅包括与重要笔记相关的人员。
另请注意 :conditions 自 3.1 起已弃用。