昨日のやつ(Ruby の Enumerable#inject() - portal shit!)、「使い方間違ってるだけだろwww」みたいな感じの言及があったのでもうちょっと調べてみた。やりたかったのは以下のようなこと。日付の範囲をレシーバーにした Enumerable オブジェクトをつくって、日付をキーにグルーピングされたハッシュを作りたかった。
Date.today.beginning_of_month.upto(Date.today.end_of_month).inject({}) do |result, date|
result[date] = Document.where(:created_at.gt => date).and(:created_at.lt => date)
end
これを実行しようとすると
NoMethodError: undefined method `[]=' for Tue, 01 May 2012:Date
と言われる。
しかし以下のようにしたら意図した通りのハッシュを作ってくれた。
Date.today.beginning_of_month.upto(Date.today.end_of_month).inject({}) do |result, date|
result[date] = Document.where(:created_at.gt => date).and(:created_at.lt => date)
result
end
ふむふむ〜、ナルホディウスですぞ〜〜〜〜〜。Enumerable#inject の引数がハッシュではなく配列のときは最後の result
はいらないのだけど、ハッシュのときはいるらしい。
ルbyーーー1.9.2-p290 + レールズ 3.2.2 での現象です。