2013-03-17 44 views
0

我试图验证必须是在一定范围内生场的日期:验证字段可能会改变

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

虽然这种情况下,它不会对这么大的问题,我意识到,这只是其中的发展模式将被重新装载每一次,因此今年再次计算有效。

当在生产,我将如何避免这种情况,比方说,在岁末年初之际,该范围的右端仍然是因为它是前一年一样吗?

回答

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 

,或者您可以通过验证在一个进程

validates :year_of_birth, :inclusion => { :in => proc { 1900..5.years.ago.year } } 
+0

非常感谢你。我选择了proc的方式,因为它似乎是我想要实现的更加苗条的解决方案。感谢您让我知道自定义验证器的存在! – 2013-03-17 13:35:43