2010-05-27 5 views
0

Если назначить неверную дату (например, 39-го декабря) в колонке даты и времени 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

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

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

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 

Я предполагаю, что рельсы ПРИЯМКОВ эту ошибку и устанавливает значение nil. Таким образом, отключение проверки.

Смежные вопросы