Группировать несколько записей по столбцу в коллекции - PullRequest
0 голосов
/ 27 мая 2018

У меня есть коллекция записей, которую я показываю в таблице в файле представления, которая выглядит следующим образом:

|| user || sport || # of victories || # of losses ||  
|| Jane || foo   ||       1        ||      1      ||  
|| Jane || foo   ||       2        ||      3      ||  
|| Jane || bar   ||       1        ||      1      ||  
|| Jane || bar   ||       2        ||      3      ||

В приведенном выше примере я пытаюсь сгруппировать результаты по виду спорта,так что вместо двух записей

|| Jane || foo   ||       1        ||      1      ||  
|| Jane || foo   ||       2        ||      3      || 

будет одна группа, которая в настоящее время разбита на несколько записей на основе другого столбца, который я не отображаю в этом представлении.

|| Jane || foo   ||       3        ||      4      ||  

Я пытался это сделать .group и .group_by, но, похоже, я делаю это неправильно.Может кто-нибудь, пожалуйста, укажите несколько указателей

Дополнительная информация, если необходимо:

Схема таблицы

create_table "records", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
 t.integer "victories"
 t.integer "losses"
 t.bigint "user_id"
 t.bigint "sport_id"
 t.datetime "created_at", null: false
 t.datetime "updated_at", null: false
 t.integer "opposition_id"
 t.index ["opposition_id"], name: "index_records_on_category_id"
 t.index ["user_id"], name: "index_records_on_user_id"
end

Контроллер

  def board
    @summary = Record.all.sort_by{ |i| i.user_id }
  end

Просмотр

   <% @summary.each do |record| %>
     <tr>
      <td><%= record.user.name %></td>
      <td><%= record.sport_id %></td>
      <td><%= record.victories %></td>
      <td><%= record.losses %> </td>
    </tr>
   <% end %>

1 Ответ

0 голосов
/ 27 мая 2018

Или используйте запрос, как в примере, который я поместил все в представление, но используйте контроллер для получения данных.

<% sport_records = SportRecord.group(:user_id).select(:user_id, :sport_id, "sum(victories) as total_victories", "sum(losses) as total_losses") %>
<% sport_records.each do |sr| %>
  <p><%= sr.sport.name %> | <%= sr.user.name %> | <%= sr.total_victories %> | <%= sr.total_losses %></p>
<% end %>

Если вам также нужно сгруппировать по видам спорта, измените на

SportRecord.group(:user_id, :sport_id).select(:user_id, :sport_id, "sum(victories) as total_victories", "sum(losses) as total_losses")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...