是否可以在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'
Run Code Online (Sandbox Code Playgroud)
在Rails中,唯一类似的方法是使用includes(注意:joins不会预加载音符),如下所示:
Person.includes(:notes).where(:important, true)
Run Code Online (Sandbox Code Playgroud)
但是,这将生成以下SQL查询,该查询返回不同的结果集:
SELECT *
FROM people
LEFT JOIN notes ON notes.person_id = people.id
WHERE notes.important = 't'
Run Code Online (Sandbox Code Playgroud)
请注意,第一个结果集包括所有人,第二个结果集仅包括与重要注释相关联的人.
另请注意:条件自3.1以来已弃用.