使用validates_timeliness gem时出现异常

时间:2012-10-02 04:05:37

标签: ruby-on-rails ruby-on-rails-3 validation

自开始使用validates_timeliness gem

以来,我经常得到以下异常
    Message undefined method `<' for nil:NilClass
    Location    /client_issue/create?client_id=15285
    Action  create
    Controller  client_issue
    Query   client_id=15285
    Method  POST
    SSL true

如果某人输入了诸如2012年9月28日之类的日期,则会发生异常。如果他们使用正确的三个月字母(即2012年9月28日),则没有问题。 事实上,任何无效的月份名称都会导致例外情况,例如28 bjhg 2012。

Heres是堆栈跟踪的顶部

    /shared/bundle/ruby/1.8/gems/timeliness-0.3.6/lib/timeliness/parser.rb:142:in `fast_date_valid_with_fallback'
    /shared/bundle/ruby/1.8/gems/timeliness-0.3.6/lib/timeliness/parser.rb:24:in `make_time'
    /shared/bundle/ruby/1.8/gems/timeliness-0.3.6/lib/timeliness/parser.rb:17:in `parse'
    /shared/bundle/ruby/1.8/gems/validates_timeliness-3.0.14/lib/validates_timeliness/attribute_methods.rb:49:in `start_date='
    /shared/bundle/ruby/1.8/gems/activerecord-3.2.8/lib/active_record/attribute_assignment.rb:85:in `send'
    /shared/bundle/ruby/1.8/gems/activerecord-3.2.8/lib/active_record/attribute_assignment.rb:85:in `assign_attributes'

我的模型模型的相关部分如下所示:

    class ClientIssue < PauaServiceTable
      validates_date :start_date ,:allow_blank => true 
       ...
    end

我对gem的初始化程序包含以下内容:

    config.restriction_shorthand_symbols.update(
      :now   => lambda { Time.current },
      :today => lambda { Date.current }
     )
     config.parser.remove_formats(:date, 'm/d/yy')
     config.parser.remove_us_formats
     config.parser.use_euro_formats

我无法理解为什么我会遇到异常。我应该能够传递任何旧的垃圾,只是得到一个无效的日期消息,而不是一个例外。 我有错误的设置吗?

2 个答案:

答案 0 :(得分:0)

您正在使用提供validates_timeliness方法的validates_date gem和提出错误的timeliness gem。

你可能会使用其中之一,而不是两者。

答案 1 :(得分:0)

问题似乎是时效宝石的问题。 查看我的问题的答案here

然而,由于任何不正确的月份名称导致异常(例如28 sap 2012)也会抛出异常。我决定对日期进行手动验证,否则我的用户将一直遇到例外情况。