【发布时间】:2020-03-16 09:51:12
【问题描述】:
我有两个模型:
项目
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']})
它将返回项目,其中关联的待办事项处于完成/部分完成状态。
假设:我有两个项目:
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?)}
但这似乎很耗时。有什么方法可以有效地做到这一点?
提前致谢!
【问题讨论】:
标签: ruby ruby-on-rails-5 rails-activerecord