Преобразовать ввод в целое число перед сохранением в рельсах - PullRequest
2 голосов
/ 21 апреля 2010

У меня есть набор выбранных входов, представляющих день рождения пользователя: Birthyear, Birthmonth и Birthday. Я хочу подтвердить год рождения следующим образом:

  validates_inclusion_of :birthyear, :in => Date.today.year-50..Date.today.year-12

Таким образом, пользователю может быть не менее 12 лет, но не более 50 лет, когда он регистрируется.

Моя проблема в том, что переменная из входных данных является строкой, а не целым числом.

Так как я могу преобразовать входные данные в целое число? Есть ли более простой способ проверить возраст пользователей?

1 Ответ

1 голос
/ 21 апреля 2010

Звучит так, как будто вы определили столбец 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

Теперь все это предполагает, что входящий ввод - это четырехзначный год.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...