【问题标题】:Rails: Error "NoMethodError: undefined method `<' for nil:NilClass", missing some gem?Rails:错误“NoMethodError: undefined method `<' for nil:NilClass”,缺少一些宝石?
【发布时间】:2011-03-21 22:45:03
【问题描述】:

这里是模型类 类 Item::Item

         def validate_start_and_end_date
             errors.add(:start_date, "should not be in past") if start_date < Date.today
             errors.add(:end_date, "should not be in past") if end_date < Date.today
             errors.add(:base, "start date should not be after end date") if end_date <  start_date
         end

         belongs_to :product, {:class_name => 'Item::Product'}

   end 

这是rails控制台的日志

    ruby-1.8.7-p334 :020 > item = Item::Item.new 
    => #<Item::Item id: nil, start_date: nil, end_date: nil, product_id: nil> 
    ruby-1.8.7-p334 :021 > item.valid?
    NoMethodError: undefined method `<' for nil:NilClass
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.3/lib/active_support/whiny_nil.rb:48:in `method_missing'
    from /media/Development/codie/orgstud-security/app/models/lecture/lecture.rb:13:in `validate_start_and_end_date'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:419:in `_run_validate_callbacks'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activemodel-3.0.3/lib/active_model/validations.rb:212:in `run_validations!'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activemodel-3.0.3/lib/active_model/validations/callbacks.rb:67:in `run_validations!'
    from /home/sgarg/.rvm/gems/ruby-1.8.7-p334/gems/activesupport-3.0.3/lib/active_support/callbacks.rb:413:in `_run_validation_callbacks'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activemodel-3.0.3/lib/active_model/validations/callbacks.rb:67:in `run_validations!'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activemodel-3.0.3/lib/active_model/validations.rb:179:in `valid?'
    from /home/maddy/.rvm/gems/ruby-1.8.7-p334/gems/activerecord-3.0.3/lib/active_record/validations.rb:55:in `valid?'
from (irb):21

【问题讨论】:

    标签: ruby-on-rails model gem ruby-on-rails-plugins nomethoderror


    【解决方案1】:

    它在抱怨,因为在进行自定义验证时尚未设置 start_date 和 end_date 属性。当它尝试将 start_date 与今天的日期进行比较时,它会尝试比较一个 nil 值。

    您可以将验证包装在条件块中:

    if !start_date.nil? && !end_date.nil?
      ...
    end
    

    【讨论】:

    • unless start_date.nil? &amp;&amp; end_date.nil?
    【解决方案2】:

    请注意,您在控制台中创建的Item 对象具有start_dateend_datenil

    那么,在您的验证方法中比较 nil &lt; Date.today 会导致异常。

    【讨论】:

    • 我刚刚看到第一个代码块描述了Lecture::Lecture 模型。您可以发布Item::Item 模型吗? (可能是同样的问题,但我不能确定。)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-24
    • 2016-10-26
    • 2015-03-19
    • 2016-08-13
    • 1970-01-01
    • 2017-07-04
    • 2016-01-02
    相关资源
    最近更新 更多