在具有两个日期属性的 rails 中进行验证

cho*_*ise 3 ruby validation model ruby-on-rails ruby-on-rails-3

所以我有一个带有两个日期属性的模型

  # migration
  t.date :valid_from
  t.date :valid_until
Run Code Online (Sandbox Code Playgroud)

这些是可选的,您应该只能定义valid_fromor valid_until,但是如果两个日期都已填写,我希望(当然)valid_from早于valid_until.

检查这一点的最佳位置是在带有验证器的模型内部,不是吗?我认为控制器不会是最好的地方。

这怎么能用我的模型中的验证器来完成?我尝试了几件事但没有运气。

Dyl*_*kow 5

您可以使用自定义验证器:

validate :valid_date_range_required

def valid_date_range_required
  if (valid_from && valid_until) && (valid_until < valid_from)
    errors.add(:valid_until, "must be later than valid_from")
  end
end
Run Code Online (Sandbox Code Playgroud)