我正在尝试验证必须在一定范围内的出生日期字段:
validates :year_of_birth, :inclusion => { :in => 1900..Date.today.year - 5 }
尽管在这种情况下它不会造成这么大的问题,但我意识到这仅在每次重新加载模型并因此再次计算当前年份的开发中才有效。
在生产时,我将如何避免这种情况,例如,在年初时,范围的右端与前一年保持不变?
我正在尝试验证必须在一定范围内的出生日期字段:
validates :year_of_birth, :inclusion => { :in => 1900..Date.today.year - 5 }
尽管在这种情况下它不会造成这么大的问题,但我意识到这仅在每次重新加载模型并因此再次计算当前年份的开发中才有效。
在生产时,我将如何避免这种情况,例如,在年初时,范围的右端与前一年保持不变?
在这种情况下,我建议您进行自定义验证。
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 } }