Rails:验证start是在stop,DateTime之前

时间:2012-01-13 16:38:22

标签: ruby-on-rails ruby validation

我正在尝试使用validates_timeliness确保SliderImage.start始终在SliderImage.stop之前:

class SliderImage < ActiveRecord::Base

  validates_datetime :start, :stop
  validates :start, :timeliness => {:before => stop}

end

但当然stop尚未定义。我怎么能做到这一点?

2 个答案:

答案 0 :(得分:4)

必须在要评估的记录对象上调用停止值。简写版本通过符号:stop,这被假定为记录上的方法,将在验证时调用。

否则你可以像这样使用lambda

lambda {|r| r.stop } 

我倾向于将您的验证写成

validates_datetime :start
validates_datetime :stop, :after => :start

P.S。我是该插件的作者:)

答案 1 :(得分:4)

使用此验证而不安装任何gem的更简单方法是调用验证方法:

class Course < ActiveRecord::Base
  validate :start_date_before_end_date

  def start_date_before_end_date
    if self.start_date > self.end_date
      errors.add(:start_date, "Start date should be before end date")
    end
  end
end