Railsのfindオプションのgroupとgroup_by

特定のカラムをもとに、モデルをグループ分けしたいときにfind(:all)に:groupオプションを使うのと、find(:all)のオブジェクトにgroup_byを使うのとどう違うのか気になったので調べてみた。
例えばTopicモデルをuser_idでグループ分けしたい場合
#findオプションのgroup
@topics=Topic.find(:all,:group=>"user_id")
for topic in @topics
p topic
end
#結果
#<Topic id:5,user_id: 1,title:...>
#<Topic id:6,user_id: 2,title:...>
#<Topic id:7,user_id: 3,title:...>
#user_idごとに最新のレコード1件のみ取得。

#group_byの場合
@topics=Topic.find(:all).group_by{|topic|topic.user_id}
for topic in @topics
p topic
end

#結果
[1,#<Topic id:5,user_id: 1,title:...>,#<Topic id:8,user_id: 1,title:...>,...]
[2,#<Topic id:6,user_id: 2,title:...>,#<Topic id:9,user_id: 2,title:...>,...]
[3,#<Topic id:7,user_id: 3,title:...>,#<Topic id:8,user_id: 3,title:...>,...]
#[group_byで指定したキー,該当するレコードの配列]
という配列になる



タグ:Rails
posted by digital-squad at 2009年06月19日 10時46分 | Comment(0) | TrackBack(0) | Ruby on Rails / Ruby
この記事へのコメント
コメントを書く
お名前: [必須入力]

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。