2014-03-06 640 views
2

我的自定义验证器出现问题。我有一个模型Price,它看起来像这样:Rails 4自定义验证

class Price < ActiveRecord::Base 
    belongs_to :car 
    validates :from_days, :to_days, :netto_price, presence: true, numericality: true 
    validate :days_range_validation 

    private 

    def days_range_validation 
    unless to_days > from_days 
     errors[:to_days] << I18n.t('price.must_be_greater') 
    end 
    end 
end 

而问题是,当我离开to_daysfrom_days空白在我的形式,我得到以下错误:

undefined method `>=' for nil:NilClass 

而且现在的目标是仅当from_daysto_days存在时才使用此验证程序,但我不知道该怎么做。有任何想法吗?

回答

2

你应该设置:if选项:

validate :days_range_validation, :if => :days_ranges_present? 

# ... 
private 

def days_ranges_present? 
    to_days.present? && from_days.present? 
end 
+0

这是伟大的答案。 –

+0

@MateuszUrbański谢谢。你介意将答案标记为接受吗? –