首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误错误

错误错误
EN

Stack Overflow用户
提问于 2010-05-28 02:49:37
回答 1查看 165关注 0票数 0

如果您为datetime列分配了一个无效的日期(如12月39号),则ActiveRecord将返回一个"can't be Not“错误,而它可能会返回一个类似"Not a valid date”的错误

我的问题。这是预期中的rails行为,是bug,还是我可以修补的东西?

代码语言:javascript
复制
class ExerciseLog < ActiveRecord::Base
  validates_presence_of :scheduled_datetime
end

启动控制台。

代码语言:javascript
复制
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中

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-05-28 03:00:31

我的猜测是,当一个无效的字符串被分配给date列时,rails对Date执行的魔术解析会返回nil

如果您在rails控制台中执行t = Date.parse("2010-12-39"),则会得到:

代码语言:javascript
复制
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。从而触发验证。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2923956

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档