ActiveSupportの日付処理に関しては、Rails 2とRails 3の動作が異なることに気付きました。
Rails 2.3アプリケーションで次のコードを実行すると、期待どおりに実行され、一度に1週間ずつ日付が出力されます。
>> first = Date.today
=> Fri, 23 Mar 2012
>> last = Date.today + 2.months
=> Wed, 23 May 2012
>> first.step(last, 1.week) { |date| puts date }
2012-03-23
2012-03-30
2012-04-06
2012-04-13
2012-04-20
2012-04-27
2012-05-04
2012-05-11
2012-05-18
Rails 3アプリケーション内で同じコードを試すと、次のようになります。
>> first = Date.today
=> Fri, 23 Mar 2012
>> last = Date.today + 2.months
=> Wed, 23 May 2012
>> first.step(last, 1.week) { |date| puts date }
Mar 23, 2012
TypeError: expected numeric
問題は、Rails 3が.weeksメソッドをどのように処理しているかにあるようです。Rails2は以下を出力します
>> 1.week
=> 7 days
Rails 3が出力する場所
>> 1.week
=> 604800
ここで何が起こっているのか、Rails 3で一度に1週間の日付範囲をきれいに繰り返す方法を誰もが説明できますか?
回答:
回答№1は1なぜ機能しないのかわかりませんが、これは次のように思われます:
(Date.today..(Date.today + 30)).step(7)