Неверная ошибка - PullRequest
       11

Неверная ошибка

0 голосов
/ 27 мая 2010

Если вы присваиваете недопустимую дату (например, 39 декабря) столбцу datetime, ActiveRecord возвращает ошибку «не может быть пустой», когда, вероятно, должна возвращать ошибку типа «Неправильная дата»

Мой вопрос. Это ожидаемое поведение рельсов, ошибка или что-то, что я мог бы исправить?

class ExerciseLog < ActiveRecord::Base
  validates_presence_of :scheduled_datetime
end

Запустите консоль.

e = Log.new
# lets set a date for Dec 39th which obviously doesn't exist
e.scheduled_datetime = "2010-12-39"
e.save
=> false
# this is the confusing message since our form did post a valid date
e.errors.on(:scheduled_datetime)
=> "can't be blank"
e.scheduled_datetime = "2010-12-30"
e.save
=> true

Я обнаружил эту проблему, когда случайно перенес значения месяца и дня.

Кстати, это в Rails 2.3.5

1 Ответ

1 голос
/ 27 мая 2010

Я предполагаю, что без рытья в коде rails, этот магический анализ, который rails выполняет с датой, возвращает nil, когда столбцу Date назначена неверная строка.

Если вы выполните t = Date.parse("2010-12-39") в консоли rails, вы получите:

ArgumentError: invalid date
    from /usr/local/lib/ruby/1.8/date.rb:931:in `new_by_frags'
    from /usr/local/lib/ruby/1.8/date.rb:975:in `parse'
    from (irb):2
    from :0

Я предполагаю, что rails перехватывает эту ошибку и устанавливает значение nil. Таким образом, запуск проверки.

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