различные формы метода валидации в рельсах - PullRequest
1 голос
/ 10 января 2012

в соответствии со встроенными функциями проверки рельсов, в чем разница между этими двумя следующими методами?

validates :password, :confirmation =>true

и

validates_confirmation_of :password

насколько я понимаю, первый был только что представлен в рельсах версии 3? я прав?

1 Ответ

1 голос
/ 10 января 2012

Они оба делают одну и ту же вещь, validates_confirmation_of - это только один из множества коротких вспомогательных методов для validates.

Если вы посмотрите на источник, вы увидите, что validatesметод только что написан для обработки всех валидаторов, тогда как validates_confirmation_of явно использует ConfirmationValidator

Я думаю, validates_confirmation_of был введен в Rails 2, так что он существует довольно давно.

Sourceсравнение:

  def validates_confirmation_of(*attr_names)
    validates_with ConfirmationValidator, _merge_attributes(attr_names)
  end

и

  def validates(*attributes)
    defaults = attributes.extract_options!
    validations = defaults.slice!(*_validates_default_keys)

    raise ArgumentError, "You need to supply at least one attribute" if attributes.empty?
    raise ArgumentError, "You need to supply at least one validation" if validations.empty?

    defaults.merge!(:attributes => attributes)

    validations.each do |key, options|
      # LOOK AT THIS LINE
      key = "#{key.to_s.camelize}Validator"

      begin
        validator = key.include?('::') ? key.constantize : const_get(key)
      rescue NameError
        raise ArgumentError, "Unknown validator: '#{key}'"
      end

      # AND LOOK AT THIS LINE
      validates_with(validator, defaults.merge(_parse_validates_options(options)))
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...