Отображение группы, количества и записей в таблице с помощью Active Record Group By в Rails - PullRequest
0 голосов
/ 11 декабря 2018

Мои модели выглядят так:

class Task < ApplicationRecord
  belongs_to :project
  belongs_to :urgency
end

class Project < ApplicationRecord
  has_many :tasks, dependent: :destroy
end

class Urgency < ApplicationRecord
  has_many :tasks
end

Я пытаюсь отобразить количество задач на проект в таблице.Например, я хочу видеть таблицу, показывающую, что у проекта A есть 10 задач, а у проекта B - 7 задач и т. Д.

Кроме того, я хочу затем иметь возможность отображать только количество задач в каждом проекте, где срочностьвысокий (это будет означать, что нужно взять urgency_id из таблицы задач и найти имя срочности в таблице срочности).

В моем контроллере у меня есть:

  def project
    @task = Task.joins(:project).joins(:urgency).where(urgencies: {urgency_value: 7}).group_by(&:project_id)
  end

Теперь я хочу показатьтаблица в представлении, в которой есть столбец для имени проекта, а затем еще один столбец для количества задач в этом проекте.

Я уверен, что мой код очень неэффективен, и должен быть более простой и прямойпуть.Вот мой код:

<% @task.each do |t, a| %>
    <% @counter = 0 %>
    <tr>    
        <% a.each do |x| %>
            <% @project_name = x.project.project_name %>    
            <% @counter = @counter + 1 %>
            <% @urgency = x.urgency.urgency %>  
        <% end %>
        <td><%= @project_name %></td>
        <td><%= @counter %></td>
        <td><%= @urgency %></td>
    </tr>
<% end %>

Как я могу улучшить свой код, чтобы он не был слишком длинным?Есть ли какая-нибудь "магия" Rails, которая может помочь?

...