我有一个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
由于
答案 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