如果您为datetime列分配了一个无效的日期(如12月39号),则ActiveRecord将返回一个"can't be Not“错误,而它可能会返回一个类似"Not a valid date”的错误
我的问题。这是预期中的rails行为,是bug,还是我可以修补的东西?
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中
发布于 2010-05-28 03:00:31
我的猜测是,当一个无效的字符串被分配给date列时,rails对Date执行的魔术解析会返回nil。
如果您在rails控制台中执行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我猜是rails捕获了这个错误,并将值设置为nil。从而触发验证。
https://stackoverflow.com/questions/2923956
复制相似问题