2010-05-27 60 views
0

如果您分配一個無效的日期(如39月),以日期時間列的ActiveRecord返回「不能爲空」的錯誤時,是應該可能返回一個錯誤,如「不是有效日期」不正確的錯誤

我題。這是預期的導軌行爲,錯誤還是我可以修補的?

class ExerciseLog < ActiveRecord::Base 
    validates_presence_of :scheduled_datetime 
end 

啓動控制檯。

e = Log.new 
# lets set a date for Dec 39th which obviously doesn't exist 
e.scheduled_datetime = "2010-12-39" 
e.save 
=> false 
# this is the confusing message since our form did post a valid date 
e.errors.on(:scheduled_datetime) 
=> "can't be blank" 
e.scheduled_datetime = "2010-12-30" 
e.save 
=> true 

我發現這個問題時,我不小心的月和日值。

順便說一句這是Rails的2.3.5

回答

1

我的猜測,而無需通過Rails代碼挖,是那魔分析認爲Rails會的日期返回nil當一個無效的字符串被分配給一個日期列。

如果您在軌控制檯執行t = Date.parse("2010-12-39")那麼你得到:

ArgumentError: invalid date 
    from /usr/local/lib/ruby/1.8/date.rb:931:in `new_by_frags' 
    from /usr/local/lib/ruby/1.8/date.rb:975:in `parse' 
    from (irb):2 
    from :0 

我猜測,軌道捕獲此錯誤,並將其值設爲nil。因此觸發驗證。