2016-02-26 85 views
0

我想生成一些關於模型中某些數據的統計信息按組和子組計算

我想根據關聯和狀態列創建統計信息。

Model.group(:association_id).group(:status).count 

得到像

[{ association_id1 => { status1 => X1, status2 => y1 } }, 
{ association_id2 => { status1 => x2, status2 => y2 } }...etc 

沒有真正困擾它是否在數組或哈希,只需要數出來始終如一出來的結果。 有沒有一種方法可以做到這一點或方便寶石?

回答

1

確定。找出一些更好的東西,儘管很樂意就如何清理這個問題提出建議。

group_counts = Model.group(["association_id","status"]).count 

這將返回類似:

=> {[nil, "status1"]=>2, 
[ass_id1, "status1"]=>58, 
[ass_id2, "status7"]=>1, 
[ass_id2, "status3"]=>71 ...etc 

,雖然它包含的數據,是工作一頭豬。

stats = group_counts.group_by{|k,v| k[0]}.map{|k,v| {k => v.map{|x| {x[0][1] => x[1] }}.inject(:merge) }} 

給了我一些友善一點

=> [{ 
nil => { 
    "status1" => 10, 
    "status2" => 23}, 
"ass_id1" => { 
    "status1" => 7, 
    "status2" => 23 
}...etc] 

希望幫助別人。

0

這是非常醜陋的,效率低下,必須有一個更好的方式來做到這一點,但是......

Model.pluck(:association_id).uniq.map{ |ass| { 
    name:(ass.blank? ? nil : Association.find(ass).name), data: 
    Model.where(association_id:ass).group(:status).count 
} } 

給出我需要什麼。 很明顯,如果你不需要命名,第一學期將會更簡單一些。

Model.pluck(:association_id).uniq.map{ |ass| { 
    id:ass, data:Model.where(association_id:ass).group(:status).count 
} }