Я создал каркасы проекта, этапа, задачи и подзадачи:
project
имеет связь "один ко многим" сstage
stage
имеет связь "один ко многим" сtask
task
имеет связь "один ко многим" сsub_task
.
Все таблицы stage
, task
и sub_task
содержат поля planned_end_date
и status
.
Теперь я хочу распечатать общее количество этапов, задач, подзадач, которые не завершены до planned_end_date
для каждого project
в projects#index
действии.
Как я могу сделать это в модели Rails?
class Project < ApplicationRecord
has_many :stages, dependent: :destroy
validate :end_after_start
private
def end_after_start
return if to_date.blank? || form_date.blank?
if to_date < form_date
errors.add(:to_date, "Project end date must be same or after the start date")
end
end
end
что я пробовал-
проект#index.html.erb
<% @projects.each do |project| %>
<tr>
<td><%= project.project_name %></td>
<% @stages = Stage.where(project_id: @projects.ids) %>
<% @tasks = Task.where(stage_id: @stages.ids) %>
<% @sub_tasks = SubTask.where(task_id: @tasks.ids) %>
<% stage_counter = 0 %>
<% task_counter = 0 %>
<% sub_task_counter = 0 %>
<% @stages.each{|s| stage_counter += 1 if s.planned_end_date.past? && s.status == 0 || s.planned_end_date.past? && s.status == 2} %>
<% @tasks.each{|s| task_counter += 1 if s.planned_end_date.past? && s.status == 0 || s.planned_end_date.past? && s.status == 2} %>
<% @sub_tasks.each{|s| sub_task_counter += 1 if s.planned_end_date.past? && s.status == 0 || s.planned_end_date.past? && s.status == 2} %>
<% @count =0 %>
<% @count = stage_counter + task_counter + sub_task_counter %>
<td><span class="alert"><%= @count.to_s + " Activity Pending" %></span></td>
что делает код, так это печатает общее количество ожидающих этапов, задач и подзадач для всех проектов и печатает одинаковое количество для каждого проекта. Я хочу распечатать незавершенные этапы + задачи + под_задачи для всех ожидающих выполнения этапов + задач + под_задач каждого проекта. Какие