【问题标题】:Group multiple entries by a column in a collection按集合中的列对多个条目进行分组
【发布时间】:2018-05-28 01:19:18
【问题描述】:

我有一组记录显示在视图文件中的表中,如下所示:

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

在上面的示例中,我尝试根据运动对结果进行分组,而不是拥有 2 条记录

|| 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 %>

【问题讨论】:

    标签: ruby-on-rails


    【解决方案1】:

    或者使用查询,就像我将所有内容放在视图中一样,但使用控制器来获取数据。

    <% 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")
    

    【讨论】:

    • 做到了!谢谢@iGian
    猜你喜欢
    • 2018-05-19
    • 1970-01-01
    • 2017-03-24
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多