gpt4 book ai didi

sql - Rails 包含有条件

转载 作者:行者123 更新时间:2023-12-03 05:52:07 25 4
gpt4 key购买 nike

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 起,:conditions 已被弃用。

最佳答案

根据本指南Active Record Querying

您可以像这样指定包含条件以进行预先加载

Person.includes(:notes).where("notes.important", true)

无论如何,它建议使用joins

解决此问题的方法是创建另一个这样的关联

class Person < ActiveRecord::Base
has_many :important_notes, :class_name => 'Note',
:conditions => ['important = ?', true]
end

然后您就可以执行此操作

Person.find(:all, include: :important_notes)

关于sql - Rails 包含有条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16348333/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com