然后在Rails 5中的组内进行GROUP然后SUM

时间:2017-03-15 15:30:49

标签: ruby-on-rails ruby-on-rails-5

我有一张带有游乐设施和一个列值的表格以及一个driver_id

现在我选择所有游乐设施并按driver_id分组:

@rides = Ride.all.group_by(&:driver_id)

这给了我一些例子:

{ "5":[  
   {  
      "id":null,
      "driver_id":5,
      "value":936.0
   },
   {  
      "id":null,
      "driver_id":5,
      "value":39.0
   },
   {  
      "id":null,
      "driver_id":5,
      "value":63.0
   },
   {  
      "id":null,
      "driver_id":5,
      "value":126.0
   }    
] }

所以5(在这种情况下我们只有一个组)是驱动程序ID,然后在里面我们有所有的游乐设施。现在我想要的是对每个组中的值求和。所以我想要的是:

{ "5":[  
  { sum_value: XXXX }
]}

对象可能看起来不同但问题是:如何在组内构建总和?

1 个答案:

答案 0 :(得分:0)

这可以在DB级别完成,grealty可以提高性能。

无论如何,这是您正在寻找的Ruby-Rails版本:

@rides = Ride.all.group_by(&:driver_id)
@rides.each do |driver_id, rides|
  @rides[driver_id] = rides.inject(0) { |s, e| s+= e.value }
end

如果任何Ride记录的值不是Float / Integer(例如:nil),则会失败