Edited at

ActiveRecordから取得したデータを日付別のハッシュにする

More than 3 years have passed since last update.


ありがちなコード

hash = {}

User.all.each do |u|
date = u.created_at.strftime('%Y%m%d')
hash[date] ||= []
hash[date].push u
end
# {"20160601"=> [#<User:..>...], "20160602" => ... }


Enumerable#group_byを使う

hash = User.all.group_by{|u| u.created_at.strftime('%Y%m%d') }

# {"20160601"=> [#<User:..>...], "20160602" => ... }

Enumerableの機能であるため、ActiveRecordが関係ない場所であっても使える。

集計関数を使う時はActiveRecordのgroupで出来るのだが、それ以外の時はActiveRecordのgroupだけでは解決しにくいので書いてみた。