gpt4 book ai didi

ruby-on-rails - Ruby/Rails - 如何聚合数组中的查询结果?

转载 作者:数据小太阳 更新时间:2023-10-29 06:58:38 24 4
gpt4 key购买 nike

我有一个大数据集,我想为用户清理。来自数据库的数据集看起来像这样:

ID | project_id | thread_id | action_type |description
1 | 10 | 30 | comment | yada yada yada yada yada
1 | 10 | 30 | comment | xxx
1 | 10 | 30 | comment | yada 313133
1 | 10 | 33 | comment | fdsdfsdfsdfsdfs
1 | 10 | 33 | comment | yada yada yada yada yada
1 | 10 | | attachment | fddgaasddsadasdsadsa
1 | 10 | | attachment | xcvcvxcvxcvxxcvcvxxcv

现在,当我按照与上面相同的顺序在我的 View 中输出上面的内容时,问题是它非常重复。例如,对于 project_id 10 和 thread_id 30,您会看到:

10 - 30 - yada yada yada yada yada
10 - 30 - xxxxx
10 - 30 - yada yada yada yada yada

我想学习如何在 ruby​​ 中做的是一些如何在 project_id 和 thread_id 下创建数组和聚合描述,因此输出是:

10 - 30
- yada yada yada yada yada
- xxxxx
- yada yada yada yada yada

关于从哪里开始的任何建议?这个要求对我来说是新的,所以我很感激你对你认为解决这个问题的最佳方法的想法。希望这可以在 ruby​​ 而不是 sql 中完成,因为事件提要可能会在事件类型和复杂。

谢谢

最佳答案

使用group_by http://apidock.com/rails/Enumerable/group_by在 Ruby 中或在 SQL 中。在 ruby 中:

sets = DataSet.all.group_by{ |data| [data.project_id, "-", data.thread_id].join(" ") }

然后你会得到这样的哈希:

{ "10 - 30" => [#DataSet1, #DataSet2 ...], "10 - 33" => [#DataSet7, #DataSet11 ...]

您可以在 View 中解析:

<% sets.each do |range, datas| %>
<p><%= range %>:</p>
<% datas.each do |data| %>
<p><%= data.description %></p>
<% end %>
<% end %>

each_with_index 的更新

<% sets.each_with_index do |datas, index| %>
<p><%= datas[0] %>:</p>
<% datas[1].each do |data| %>
<p><%= data.description %></p>
# some stuff with *last*
<%= "This is the last one" if data == datas[1].last %>
<% end %>
<% end %>

关于ruby-on-rails - Ruby/Rails - 如何聚合数组中的查询结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4974933/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com