【问题标题】:Incorrect error不正确的错误
【发布时间】:2010-05-27 18:49:37
【问题描述】:

如果您将无效日期(如 12 月 39 日)分配给日期时间列,ActiveRecord 将返回“不能为空白”错误,此时应该可能返回“无效日期”之类的错误

我的问题。这是预期的 Rails 行为、错误还是我可以修补的东西?

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 中

【问题讨论】:

    标签: ruby-on-rails datetime activerecord validation


    【解决方案1】:

    我的猜测是,在没有深入研究 rails 代码的情况下,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。从而启动验证。

    【讨论】:

      猜你喜欢
      • 2011-08-29
      • 1970-01-01
      • 1970-01-01
      • 2017-04-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-12
      • 2021-04-09
      相关资源
      最近更新 更多