2012-04-16 10 views
4

Railsシードの日付範囲を取得する必要があります。ルビ/レールでの日付範囲

日付範囲((Date.today - 10).. Date.today)を生成しようとすると例外が発生しました。

例外メッセージ:

しかし、すべての権利のRailsコンソールのすべてで範囲ため悪い値。

私はActiveSupportがそれに合っていると思います(私のデバッガはそれを教えてくれました)。

Ralls 3.1.3

何が起こっているのですか?

+0

これを行うことができます!日付範囲を踏みだす段階には多数のエッジケースがありますが、RailsのActiveSupportを使用している場合は、これをエレガントに処理できます。詳細については、http://stackoverflow.com/questions/19093487/ruby-create-range-of-dates/19094504#answer-19094504で私の答えをチェックしてください。D – captainpete

答えて

6

あなたは2つのエッジを分割することによって何が起こっているか理解し、そのような彼らのクラスを確認することができます。

Date.today.class # => Date 
(Date.today - 10).class # => Date 
((Date.today - 10)..Date.today).each {|d| puts d.class} # => 10 Date works for me 

あなたが経験しているエラーは、このようなものです:

('a'..10) # => ArgumentError: bad value for range 

範囲の2つの辺のクラスを投稿できますか?

(Date.today - 10).class => ? 
Date.today.class  => ? 

あなたのレール環境でどのクラスを上書きしましたか? irbで動作しますか?

PS:あなたがレールにいるとして、あなたは10.days.ago使うことができますが、それはActiveSupport::TimeWithZone

+0

エッジのクラスは、Dateです。 –

+0

私はあなたを信じていますが、とにかく試してください。((Date.today - 10).to_date..Date.today.to_date) ' – ecoologic

+0

Ecologic、ありがとう!変数名の間違い。 –

3
begin 
    ((Date.today - 10)..Date.today).each { |date| puts date } 
rescue 
    $! # => #<NameError: uninitialized constant Date> 
end 

require 'date' 
((Date.today - 10)..Date.today).each { |date| puts date } 
# >> 2012-04-06 
# >> 2012-04-07 
# >> 2012-04-08 
# >> 2012-04-09 
# >> 2012-04-10 
# >> 2012-04-11 
# >> 2012-04-12 
# >> 2012-04-13 
# >> 2012-04-14 
# >> 2012-04-15 
# >> 2012-04-16 
0

すべては私のために正常に動作だと、私はまた、レール3.1.3、ルビーの私のバージョンを使用していますto_dateを使用する必要があります1.9.2p290です。あなたのルビーバージョンを更新する必要がありますか?

+0

は1.8.7で動作します – ecoologic