У меня есть Project
модель, которая has_many: Tasks
каждая задача has_many :users, through: :userAssociations
, поэтому один человек может работать над задачей, но в случае встречи или любого сотрудничества много пользователей могут работать над одной и той же задачей.
Задачи имеют столбец: t.integer "time"
, который позволяет пользователям указывать в минутах, сколько времени заняла задача.
В методе Show проекта я бы хотел суммировать общее время, котороепроект занял.Если бы не тот факт, что Задача может иметь много пользователей с помощью модели userAssociations, я думаю, это было бы очень просто: @project.tasks.sum(:time)
, но это не удвоило бы время, если бы над задачей работали несколько пользователей.
С момента публикации этого вопроса я смог заставить его работать с этим помощником:
def project_time_spent
@timeSum = 0;
@tasks.each do |tsk|
@userTask = UserTask.where(task_id: tsk.id);
if @userTask.count(:id) > 1
@timeSum += tsk.time * @userTask.count(:id)
else
@timeSum += tsk.time
end
end
return @timeSum
end
Но это не очень "Railsy".Любые гуру Rails рекомендуют более чистый подход?Я упускаю простой метод?