Rails 根据关联记录列值加入查询

Rails join query based on associated records column value

我有两个模型:

项目

attributes: id, status (open, cancelled, reopened)
has_many: todos 

待办事项

attributes: id, project_id, status (done, partially_done, pending)
belongs_to: project

我必须使用选项卡:DonePending 在这两个选项卡中,我必须根据关联的待办事项状态显示项目。

Project.all.includes(:todos).where(todos: {status: ['done', 'partially_done']})

它将 return 个项目,其中关联的待办事项处于 done/partially_done 状态。

假设:我有两个项目:

Project 1 -> Todo 1 (done), Todo 2 (partially_done), Todo 3 (pending)
Project 2 -> Todo 4 (done), Todo 5 (partially_done), Todo 6 (done)

done 选项卡中:它将仅显示项目 2(因为所有待办事项已完成或部分完成)

pending 选项卡中,它将仅显示项目 1(因为有一个待办事项仍处于待处理状态)

如何根据待办事项筛选项目?

我可以这样做:

pending_projects = Project.joins(:todos).select{|project| project.todos.any?(&:pending?)}

不过好像很费时间。有什么办法可以有效地做到这一点?

提前致谢!

你可以这样做:

pending_projects = Project.joins(:todos).where(todos: { status: :pending })

这样您就可以将查找正确记录的所有工作交给数据库引擎,这是正确的。