def add(attribute, message = nil, options = {})
      normalized_message = normalize_message(attribute, message, options)
      if options[:strict]
        raise ActiveModel::StrictValidationFailed, full_message(attribute, normalized_message)
      end

      self[attribute] << normalized_message
      self.types[attribute.to_sym] << message.try(:to_sym)
    end
def add(attribute, message = nil, options = {})
      normalized_message = normalize_message(attribute, message, options)
      if options[:strict]
        raise ActiveModel::StrictValidationFailed, full_message(attribute, normalized_message)
      end

      self[attribute] << normalized_message
      self.types[attribute.to_sym] << message.try(:to_sym)
    end
Adds +message+ to the error messages on +attribute+. More than one error can be added to the same
 +attribute+.
 If no +message+ is supplied, <tt>:invalid</tt> is assumed.

 If +message+ is a symbol, it will be translated using the appropriate scope (see +translate_error+).
 If +message+ is a proc, it will be called, allowing for things like <tt>Time.now</tt> to be used within an error.