仅查询嵌套关联记录

时间:2021-07-10 15:00:02

标签: ruby-on-rails activerecord

我在我的模型中设置了以下内容:

class Project < ApplicationRecord
  has_many :plans
end

class Plan < ApplicationRecord
  belongs_to :project
  has_many :documents
end

class Document < ApplicationRecord
  belongs_to :plan
end

我正在尝试进行查询,在该查询中我可以轻松返回所有嵌套的关联记录。例如,我希望能够执行以下操作:Project.documents 并获取项目的所有文档。我已经用这样的 includes 试过了:

Project.includes({plans: [:documents]})

但是当我调用 Project.documents 时,这似乎并没有给我想要的东西。我真的只想要一个项目的所有文件,所以真的不需要包括计划。在 Rails 6 中是否有一种简单的方法可以做到这一点?

1 个答案:

答案 0 :(得分:2)

文档计划之间的关系首先通过项目,因此您可以使用joins,指定一个文档属于一个计划,而一个计划属于一个项目。之后,您可以通过选择 project_id 等于 ...plans(其 document 所属)来过滤行:

Document.joins(plan: :project).where(plans: { project_id: ... })