0

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

鉴于:

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' }

谢谢。

4

2 回答 2

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 进行比较,然后添加您的自定义错误。

我希望它有所帮助。

于 2013-11-08T12:17:49.243 回答
1

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

于 2013-11-09T11:52:02.220 回答