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


ありがちなコード

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だけでは解決しにくいので書いてみた。