特定の範囲内にある必要がある生年月日フィールドを検証しようとしています。
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 } }