2016-02-26 3 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 

Which, в то время как она содержит данные, свинья работать.

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 
} } 
Смежные вопросы