2013-07-28 182 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將返回一個散列,陣列。然而,在許多情況下散列比陣列好,所以我認爲這不是一個缺點。

相關問題