# File lib/active_model/errors.rb, line 281
    def generate_message(attribute, type = :invalid, options = {})
      type = options.delete(:message) if options[:message].is_a?(Symbol)

      if options[:default]
        ActiveSupport::Deprecation.warn \
          "Giving :default as validation option to errors.add has been deprecated.\n" +
          "Please use :message instead."
        options[:message] = options.delete(:default)
      end

      defaults = @base.class.lookup_ancestors.map do |klass|
        [ "#{@base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.attributes.#{attribute}.#{type}""#{@base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.attributes.#{attribute}.#{type}",
          "#{@base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.#{type}""#{@base.class.i18n_scope}.errors.models.#{klass.model_name.i18n_key}.#{type}" ]
      end

      defaults << options.delete(:message)
      defaults << "#{@base.class.i18n_scope}.errors.messages.#{type}""#{@base.class.i18n_scope}.errors.messages.#{type}"
      defaults << "errors.attributes.#{attribute}.#{type}""errors.attributes.#{attribute}.#{type}"
      defaults << "errors.messages.#{type}""errors.messages.#{type}"

      defaults.compact!
      defaults.flatten!

      key = defaults.shift
      value = (attribute != :base ? @base.send(:read_attribute_for_validation, attribute) : nil)

      options = {
        :default => defaults,
        :model => @base.class.model_name.human,
        :attribute => @base.class.human_attribute_name(attribute),
        :value => value
      }.merge(options)

      I18n.translate(key, options)
    end