Ruby on rails 具有两个日期属性的rails中的验证

Ruby on rails 具有两个日期属性的rails中的验证,ruby-on-rails,ruby,ruby-on-rails-3,validation,model,Ruby On Rails,Ruby,Ruby On Rails 3,Validation,Model,因此,我有一个具有两个日期属性的模型 # migration t.date :valid_from t.date :valid_until 这些是可选的,您应该能够定义从到的valid\u或到的valid\u,但是如果两个日期都已填写,我希望(当然)从到的valid\u早于valid\u 检查这一点的最佳位置是在模型内部,带有验证器,不是吗?我认为控制员不是最好的地方 如何在我的模型中使用验证器来实现这一点?我尝试了几种方法,但运气不佳。您可以使用自定义验证器: validate

因此,我有一个具有两个日期属性的模型

  # migration
  t.date :valid_from
  t.date :valid_until
这些是可选的,您应该能够定义从到的
valid\u或到
valid\u,但是如果两个日期都已填写,我希望(当然)从
到的
valid\u早于
valid\u

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


如何在我的模型中使用验证器来实现这一点?我尝试了几种方法,但运气不佳。

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

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
验证:需要有效的\u日期\u范围\u
def有效日期范围要求
if(有效期从&有效期到)&(有效期到<有效期从)
错误。添加(:valid\u-to,“必须晚于valid\u-from”)
结束
结束

如果您发现自己必须验证很多日期,您可能需要添加gem!它为您提供了一个很好的语法,可能还提供了您所需要的所有灵活性。

nice,虽然我在谷歌上没有找到在对象中定义简单方法的示例,但它们都是关于对验证器进行子类化的。很好,谢谢!