не обязательно валидация модели date_column для неверного назначения даты - PullRequest
0 голосов
/ 01 февраля 2012

Рассмотрим сценарий,

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 после ввода недопустимой даты рождения, пользователь будет считать, что он ввел правильную дату рождения, но на самом деле его дата рождения вообще не сохраняется.

Любая подсказка, как обойти эту проблему ??

1 Ответ

1 голос
/ 02 февраля 2012

Я не знаю, работают ли опции allow_blank и allow_nil с пользовательскими проверками, но это легко написать самостоятельно.

validate :valid_birth_date

private
  def valid_birth_date
    errors.add(:birth_date, "is invalid.") unless birth_date.blank? || valid_date?(birth_date)
  end

  def valid_date?(date)
    begin
      !!Date.parse(date)
    rescue
      false
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...