group_by のときに使う &:hogehoge ってなに?
User.all.group_by(&:age)
レコードをグルーピングするときgroup_by
を使いますが、引数の&
(アンパサンド、アンド)の挙動をいまいち理解してなかったので調べてみました。
Rubyではメソッド呼び出しの引数に「&手続きオブジェクト」を渡すと、手続きオブジェクトをブロックとして渡すことができます。Ruby 1.8.7以降では「&シンボル」を渡すと、「シンボル.to_proc」をブロックとして渡すことができます。
つまり、以下のように書けてとっても便利です。
# User.all.group_by{|s| s.age } と同じ User.all.group_by(&:age) # ["12", "34", "56"].collect {|s| s.to_i } と同じ ["12", "34", "56"].collect(&:to_i) # [1, 2, 3, nil, 5, 6].select {|s| s.present? } と同じ [1, 2, 3, nil, 5, 6].select(&:present?)
これはなかなか使えますね〜。(^^)