Звучит так, как будто вы определили столбец birthyear
db как строку. Rails преобразует входные параметры в соответствующий тип при назначении. Таким образом, user.new(params[:user])
сохранит birthyear
в определенном типе купить тип столбца БД.
Если вы не можете изменить столбец db на целое, попробуйте создать массив допустимых строк.
validates_inclusion_of :birthyear,
:in => (Date.today.year-50..Date.today.year-12).map(&:to_s)
Теперь, не задумываясь, на производстве классы моделей могут кэшироваться, и у вас может быть случай, когда диапазон дат будет неправильным для нового года, пока вы не перезапустите.
Я бы добавил это в функцию проверки и не использовал проверку включения для предотвращения этого случая.
def validate
current_year = Date.today.year
if birthyear && (birthyear.to_i <= current_year - 50 || birthyear.to_i >= current_year - 12)
errors.add(:birthyear, "must be between 12 and 50 years of age")
end
end
Теперь все это предполагает, что входящий ввод - это четырехзначный год.