2017-03-15 42 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