0

這裏是模型類 類項目::項目<的ActiveRecord :: Base的 validates_presence_of:起始日期,時間:END_DATE,:PRODUCT_ID 驗證:validate_start_and_end_dateRails:錯誤「NoMethodError:未定義的方法`<'for nil:NilClass」,缺少一些寶石?

  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 

這裏是日誌軌控制檯

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 

回答

1

請注意,您在控制檯中創建的對象具有start_date,end_datenil

然後,您的驗證方法中nil < Date.today的比較引起異常。

+0

我剛纔看到的第一個代碼塊來說明'講座:: Lecture'模型。你可以發佈'Item :: Item'模型嗎? (這可能是同樣的問題,但我不能確定。) – 2011-03-21 22:58:58

2

這是抱怨,因爲start_date和end_date屬性在您的自定義驗證時尚未設置。當它試圖比較start_date和今天的日期時,它試圖比較一個零值。

你可以換你驗證的條件塊:

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

'除非start_date.nil? && end_date.nil?' – Noz 2013-04-22 20:19:48

相關問題