Насколько я понимаю, вы пытаетесь отметить, что родитель (Project
) завершен, когда все дочерние элементы (Task
s) заполнены.Мне приходилось делать это много раз, но эта логика принадлежит модели вместо контроллера.
Если у вашего Task
есть логический атрибут с именем complete
, Rails автоматически сгенерирует complete?
метод (обратите внимание на знак вопроса).
Просто добавьте метод complete?
в ваш проект, который проверяет, все ли задачи complete?
.
class Project < ApplicationRecord`
...
# Have all tasks been completed?
def complete?
tasks.all? { |t| t.complete? }
end
...
end
Затем, чтобы убедиться, что вашпроект завершен, просто запустите project.complete?
Это лучше, чем добавить столбец в вашу таблицу projects
, потому что вы не хотите дублировать данные.Вы можете сделать вывод, что из данных tasks
уже завершено project
, и таким образом вы не рискуете, если таблица projects
будет случайно не синхронизирована с заданиями.Особенно, если вы пометили проект как завершенный, а затем добавили задачу позже.