2012-08-08 55 views
6

我有,我正在使用GROUP_BY活动记录顺序

@foo = Foo.group_by(&:relation) 

然后主动记录查询视图我使用

@foo.each do |group, values| 
group x has values.count elements 
end 

有没有一种方法,我可以按每个组的数量来排序吗?

回答

7

group_by不是ActiveRecord方法,组是。 group_by是一个枚举器方法。

@foo = Foo.group('relation').order('count_id asc').count('id') 

"Order by" result of "group by" count?采取什么。

否则,如果你想它在Ruby的层次进行排序,你可以为#做

disordered_hash = {:two=>[1, 2], :one=>[1], :three=>[1, 2, 3]} 
ordered_array = disordered_hash.sort {|k, v| k[1].count <=> v[1].count} # add .reverse if you want 
# => [[:one, [1]], [:two, [1, 2]], [:three, [1, 2, 3]]] 
+0

未定义的方法'秩序” <哈希:0xc03dd68> – 2012-08-09 03:17:20

+0

如果你改变GROUP_BY到组是什么?编辑我的答案。 – oldergod 2012-08-09 04:45:41

+0

这会工作,我会给你。 虽然我认为这是在db级别上进行分组,而另一个给我的东西,我可以在ruby中迭代。 – 2012-08-17 05:54:15