相关疑难解决方法(0)

Rails包括条件

是否可以在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以来已弃用.

sql ruby-on-rails

54
推荐指数
5
解决办法
4万
查看次数

标签 统计

ruby-on-rails ×1

sql ×1