根据可能更改的变量验证字段

时间:2013-03-17 13:16:28

标签: ruby-on-rails validation date activerecord

我正在尝试验证必须在一定范围内的出生日期:

validates :year_of_birth, :inclusion => { :in => 1900..Date.today.year - 5 }

虽然对于这种情况它不会造成这么大的问题,但我意识到这只适用于每次重新加载模型并因此再次计算当前年份的开发中。

在投入生产时,我怎么能避免这种情况,比如说,在年初,该范围的右端是否与前一年相同?

1 个答案:

答案 0 :(得分:1)

在这些情况下,我建议您进行自定义验证。

validate :validates_year_of_birth

def validates_year_of_birth
  five_years_ago = 5.years.ago.year
  if year_or_birth && (year_of_birth < 1990 || year_of_birth > five_years_ago)
    errors.add :year_of_birth, "should be between 1990 and #{five_years_ago}"
  end
end

或者您可以在proc

中传递验证
validates :year_of_birth, :inclusion => { :in => proc { 1900..5.years.ago.year } }