如何在更新时验证开始日期?

时间:2013-11-07 15:16:11

标签: ruby-on-rails ruby-on-rails-3 validation

如何验证更新时的开始日期,它应该不是之前的日期而不是之前保存的日期。 例如: - 就像我创建了开始日期为2013年11月7日的记录,在更新时它不应该在07/11/2013之前。

在视图中:

f.input :start_date, as: :datepicker
f.input :end_date, as: :datepicker

模型:

validates :start_date, allow_nil: true, date: { after: Date.today - 1, message: 'must be today or after today' }, on: :create
validates :end_date, allow_nil: true, date: { after: :start_date, message: 'must be after start date' }

感谢。

2 个答案:

答案 0 :(得分:1)

我现在无法测试它,但我认为它可能有效:

validate :previous_start_date

def previous_start_date
  old_start_date = Model.find(self.id).start_date
  if(old_start_date > self.start_date)
   self.errors.add(:start_date, "Can't be previous than the initial date")
  end 
end

在验证时,该对象尚未保存,因此,我相信从数据库中检索对象将为您提供以前的值。使用手中的值,您可以与当前的start_date进行比较,然后添加自定义错误。

我希望它有所帮助。

答案 1 :(得分:1)

您可以添加attr_accessor:previous_start_date(也不要忘记attr_accessible)并在表单上添加隐藏字段。该字段的值必须等于DB的start_date。 然后你可以使用after:previous_start_date。 注意:必须从DB设置值previous_start_date,最好在getter方法的模型中设置或在before_validation回调中设置。