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
我必须使用选项卡:Done
和 Pending
在这两个选项卡中,我必须根据关联的待办事项状态显示项目。
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 })
这样您就可以将查找正确记录的所有工作交给数据库引擎,这是正确的。
我有两个模型:
项目
attributes: id, status (open, cancelled, reopened)
has_many: todos
待办事项
attributes: id, project_id, status (done, partially_done, pending)
belongs_to: project
我必须使用选项卡:Done
和 Pending
在这两个选项卡中,我必须根据关联的待办事项状态显示项目。
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 })
这样您就可以将查找正确记录的所有工作交给数据库引擎,这是正确的。