0

特定の範囲内にある必要がある生年月日フィールドを検証しようとしています。

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

この場合、それほど大きな問題にはなりませんが、モデルが毎回リロードされる開発でのみ有効であり、したがって、今年が再度計算されることに気付きました。

生産中の場合、たとえば、年の変わり目に、範囲の右端が前年と同じままになることをどのように回避できますか?

4

1 に答える 1

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 } }
于 2013-03-17T13:20:55.017 に答える