Ruby on Rails,在保存之前验证日期时间

时间:2014-09-07 10:09:49

标签: ruby-on-rails ruby datetime

我有一个form_for,它给我两个日期时间格式(开始和结束日期)。我的目标是检查end_date>起始日期。

在我的模型中,我不知道该怎么做,这是我到目前为止做的(不工作):

class XXX < ActiveRecord::Base
  before_create :check_dates

  private

    def check_dates
      if self.end_date > self.start_date //I don't know how to do it
    end
end

错误:

syntax error, unexpected end-of-input, expecting keyword_end

由于

2 个答案:

答案 0 :(得分:4)

您收到此错误,因为在您的回调中您只有一个条件,您没有指定在此条件评估为true时要执行的操作,您也没有关闭if语句因此语法错误。虽然你的回调也会做同样的事情,但在你的情况下我认为如果你使用验证会更好

class XXX < ActiveRecord::Base
  validate :check_dates

  def check_dates
    errors.add(:base, "end date should be greater than start") if self.end_date > self.start_date //I don't know how to do it
  end
end

答案 1 :(得分:2)

Mandeep的答案是全面的,涵盖了你想要的东西。我只想添加如果您想在其他模型中使用此验证器,您可以创建验证器模型:

class MyValidator < ActiveModel::Validator
  def validate(record)
    if record.end_date > record.start_date
      record.errors[:base] << 'End date should be greater that start date!'
    end
  end
end

class XXX < ActiveRecord:Base
  include ActiveModel::Validations
  validates_with MyValidator
end

代码来自rubyonrails.org:http://edgeguides.rubyonrails.org/active_record_validations.html