2017-03-15 40 views
0

我有一个表与游乐设施和一列值和一个driver_idGROUP,然后在组中的轨道5内的轨道5

现在我通过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(在这种情况下,我们只有一个组)是驾驶员身份证,然后里面我们有所有的游乐设施。现在我想要对每个组内的值进行求和。所以,我想是这样的:

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

的对象可能会显得diferente但问题是:如何建立组内的总和?

+0

可能重复[rails 3 group by and sum](http://stackoverflow.com/questions/9068926/rails-3-group-by-and-sum) – Ilya

+0

你至少试过Google吗? – Ilya

+0

是的,当然。 – almo

回答

0

这可以在数据库层面完成,并且可以提高性能。

无论如何,这里是你正在寻找什么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 

如果有骑车的记录具有的值不是浮点/整数(例如这将失败)

+0

你会在数据库级别上建议什么? – almo

+0

@Ilya我赞同你的第一点,但我不明白第二点。你建议做'rides.inject(:+)'吗?这是行不通的,因为Ride没有实现'+'方法(也许不应该)。我错过了什么? – MrYoshiji

+0

@almo你可以看看伊利亚在你的问题的评论中链接的帖子 – MrYoshiji