2013-07-28 191 views
1

比方说,我有一张表“foo”。它有一个栏“栏”。条的类型是整数,但是我不知道预先有多少个数值。我想根据bar的值对记录分组。具有相同“bar”值的记录应包含在数组中。所有这样的数组应该包含在另一个数组中。ActiveRecord - 具有相同值的组记录

我想要做的就是

Foo.all 
=> [#<Foo id: 1, bar: 1>, #<Foo id: 2, bar: 1>, #<Foo id: 3, bar: 2>, #<Foo id: 4, bar: 3>] 
Foo.group_records_with_the_same_value("bar") 
=> [[#<Foo id: 1, bar: 1>, #<Foo id: 2, bar: 1>], [#<Foo id: 3, bar: 2>], [#<Foo id: 4, bar: 3>] 

什么是最优雅的方式来实现我的目标?

回答

2

使用Enumerable#group_by

h = Foo.all.group_by { |x| x.bar } 
h.each {|key, value| value.each {|foo| puts foo['bar'] }} 

group_by将返回一个散列,阵列。然而,在许多情况下散列比阵列好,所以我认为这不是一个缺点。

相关问题