在轨

2014-11-05 27 views
0

使用多个组时,给定一个表/型号叫做分配与字段更改返回的记录格式:在轨

id 
student_id 
grade (e.g. A, B, C) 
... some other stuff 

我怎样才能让学生的名单,有多少他们有各个等级?

我有最近一直:

Assignment.group(:student_id).group(:grade).count 

但是这给了我在格式的数据:

{[student_id, grade] => count, [student_id, grade] => count, ...} 

如。

{ 
    [1, "A"] => 8, 
    [1, "B"] => 6, 
    [2, "A"] => 7, 
    [2, "F"] => 5 
} 

有没有一种方法,我可以得到阵列是在价值方面,所以我可以很容易地遍历并打印出学生成绩?即如下所示:

{ 
    1 => {"A" => 8, "B" => 6}, 
    2 => {"A" => 7, "F" => 5} 
} 

回答

1

最近的你是最后一个。现在,你需要稍微重新索引结果:

student_grades_count = { 
    [1, "A"] => 8, 
    [1, "B"] => 6, 
    [2, "A"] => 7, 
    [2, "F"] => 5 
} 

student_grades_count = student_grades_count.reduce({}) do |sum, ((student_id, grade), count)| 
    sum[student_id] ||= {} 
    sum[student_id][grade] = count 
    sum 
end 
+0

我曾担心是这样的话 - 我希望我能避免的Rails这样做,然后我不得不在不同的结构重新做这件事!虽然谢谢! – Ash 2014-11-05 15:15:31