如何验证更新时的开始日期,它应该不是之前的日期而不是之前保存的日期。 例如: - 就像我创建了开始日期为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' }
感谢。
答案 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回调中设置。