Счетчик не работает ожидаемым образом в приложении рельсов - PullRequest
0 голосов
/ 06 марта 2020

Я создал projet эшафот, который имеет много к одной ассоциации с user. проект scaffold имеет связь один-ко-многим с stage, stage - связь один-ко-многим с sub_task. каждый каркас имеет один атрибут planned_end_date, теперь я хочу напечатать номер этапа, этап и подзадача не завершена в выбранную дату. и выведите это в столбец действия project # index. этот код хорошо работает в проекте # show action, удаляя @projects.each do |project|, но тот же код в проекте # index action печатает одинаковое число в каждой строке столбца.

projects_controller.rb (index # Action)


    @projects = current_user.projects.all.order("created_at DESC").paginate(page: params[:page], per_page: 15)

    @projects.each do |project|

      @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 = stage_counter + task_counter + sub_task_counter
        end

project # index

  <table>
    <thead>
      <tr>
        <th>Project Name</th>
        <th>Activity Status</th>
      </tr>
    </thead>

    <tbody>
      <% @projects.each do |project| %>
        <tr>
          <td><%= project.project_name %></td>
          <td><%= @count %></td>
        </tr>
      <% end %>
    </tbody>
  </table>

Gemfile

ruby '2.6.3'
gem 'rails', '~> 5.2.4'

Я хочу напечатать общее количество этапов, задач, под_задач каждого проекта, которые не были выполнены вовремя. в проекте # index действие. Может кто-нибудь знает, чего мне не хватает ???

1 Ответ

1 голос
/ 06 марта 2020

@ рок, во-первых, вы не используете ruby правильно.

вам не нужно использовать l oop и счетчики вместо этого, вы можете сделать так:

@projects = current_user.projects.all.order("created_at DESC").paginate(page: params[:page], per_page: 15)

@total_count = []

@projects.each do |project|

  stages = project.stages.where('stages.planned_end_date < ?', Time.now).where('status IN (?)', [0,2])

  tasks = project.tasks.where('tasks.planned_end_date < ?', Time.now).where('status IN (?)', [0,2])

  sub_tasks = project.sub_tasks.where('sub_tasks.planned_end_date < ?', Time.now).where('status IN (?)', [0,2])

  @total_count << { project_id: (stages.count + tasks.count + sub_tasks.count) }
end

вывод будет:

[{1: 20}, {2: 25}, {4: 30}, {7: 10}] Это массив ха sh в каждый элемент которого имеет ключ в качестве идентификатора проекта и значение как общее количество этапов, задач и подзадач этого проекта

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...