Рассмотрим сценарий,
User model with name, birth_date fields
(здесь дата рождения не обязательна)
внутри формы просмотра Дата рождения назначается как '31/31/1985', что недопустимо
в идеале пользовательский объект должен быть недопустимым и вызывать ошибку в поле birth_date, но этого не происходит, и пользовательский объект сохраняется с birth_date как пустым, что полностью вводит в заблуждение.
После отладки обнаружил, что при назначении атрибутов значение birth_date он назначается какпусто и, поскольку birth_date является необязательным, объект сохраняется.
u = User.new
# invalid date assignment
u.birth_date = '31/31/2011'
u.birth_date #=> nil
# valid date assignment
u.birth_date = '1/1/2011'
u.birth_date #=> Sat, 01 Jan 2011
class User < ActiveRecord::Base
def initialize(args={})
logger.info args[:birth_date] #invalid value comes upto here but vanishes afterwords
super
end
end
Я не говорю, что он неправильный, но он не должен вводить в заблуждение с точки зрения пользователя.bcz после ввода недопустимой даты рождения, пользователь будет считать, что он ввел правильную дату рождения, но на самом деле его дата рождения вообще не сохраняется.
Любая подсказка, как обойти эту проблему ??