Railsシードの日付範囲を取得する必要があります。ルビ/レールでの日付範囲
日付範囲((Date.today - 10).. Date.today)を生成しようとすると例外が発生しました。
例外メッセージ:
しかし、すべての権利のRailsコンソールのすべてで範囲ため悪い値。
私はActiveSupportがそれに合っていると思います(私のデバッガはそれを教えてくれました)。
Ralls 3.1.3
何が起こっているのですか?
Railsシードの日付範囲を取得する必要があります。ルビ/レールでの日付範囲
日付範囲((Date.today - 10).. Date.today)を生成しようとすると例外が発生しました。
例外メッセージ:
しかし、すべての権利のRailsコンソールのすべてで範囲ため悪い値。
私はActiveSupportがそれに合っていると思います(私のデバッガはそれを教えてくれました)。
Ralls 3.1.3
何が起こっているのですか?
あなたは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
エッジのクラスは、Dateです。 –
私はあなたを信じていますが、とにかく試してください。((Date.today - 10).to_date..Date.today.to_date) ' – ecoologic
Ecologic、ありがとう!変数名の間違い。 –
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
すべては私のために正常に動作だと、私はまた、レール3.1.3、ルビーの私のバージョンを使用していますto_date
を使用する必要があります1.9.2p290です。あなたのルビーバージョンを更新する必要がありますか?
は1.8.7で動作します – ecoologic
これを行うことができます!日付範囲を踏みだす段階には多数のエッジケースがありますが、RailsのActiveSupportを使用している場合は、これをエレガントに処理できます。詳細については、http://stackoverflow.com/questions/19093487/ruby-create-range-of-dates/19094504#answer-19094504で私の答えをチェックしてください。D – captainpete