У меня есть две модели:
Проект
attributes: id, status (open, cancelled, reopened)
has_many: todos
Todo
attributes: id, project_id, status (done, partially_done, pending)
belongs_to: project
Мне нужно на вкладки : Done
и Pending
На этих двух вкладках я должен показать проекты, основанные на статусе todo.
Project.all.includes(:todos).where(todos: {status: ['done', 'partially_done']})
Он вернет проекты, в которых связанные задачи находятся в состоянии done / part_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?)}
Но это кажется трудоемким. любой способ сделать это эффективно?
Заранее спасибо!