我有一张带有游乐设施和一个列值的表格以及一个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 }
]}
对象可能看起来不同但问题是:如何在组内构建总和?
答案 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),则会失败