2016-02-26 81 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 
} }