2013-03-17 88 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