我想生成一些关于我在模型中的一些数据的统计数据
我想根据关联和状态列创建统计信息。
即
Model.group(:association_id).group(:status).count
得到像
这样的结果[{ association_id1 => { status1 => X1, status2 => y1 } },
{ association_id2 => { status1 => x2, status2 => y2 } }...etc
不管它是作为一个数组还是哈希出来都不是很麻烦,只需要数字一致地出来。 是否有“轨道”方式来做这个或一个方便的宝石?
答案 0 :(得分: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]
希望能帮助某人。
答案 1 :(得分: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
} }