Създадох скелета за проекти, етапи, задачи и под_задачи:
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>
това, което кодът прави, е да отпечатва общия брой чакащи етапи, задачи и под_задачи за всички проекти и да отпечатва същия брой за всеки проект. Искам да отпечатам чакащи етапи+задачи+под_задачи за общия брой чакащи етапи+задачи+под_задачи на всеки проект. Какво