class ActiveRecord::Error

def generate_message(options = {})


  • any default you provided through the +options+ hash (in the activerecord.errors scope)

  • activerecord.errors.messages.blank

  • activerecord.errors.models.user.blank

  • activerecord.errors.models.user.attributes.title.blank

  • activerecord.errors.models.admin.blank

  • activerecord.errors.models.admin.attributes.title.blank



    1. error +message+ for the title +attribute+, it looks for these translations:
      hasn't been found. Say you have class Admin < User; end and you wanted the translation for the :blank
      When using inheritence in your models, it will check all the inherited models too, but only if the model itself

      translated attribute name and the value are available for interpolation.
      default message (e.g. activerecord.errors.messages.MESSAGE). The translated model name,
      it's looked up in models.MODEL.MESSAGE and if that is not there it returns the translation of the
      Error messages are first looked up in models.MODEL.attributes.ATTRIBUTE.MESSAGE, if it's not there,
      Translates an error message in it's default scope (activerecord.errrors.messages).
    def generate_message(options = {})
      keys = @base.class.self_and_descendants_from_active_record.map do |klass|
        [ :"models.#{klass.name.underscore}.attributes.#{attribute}.#{@message}",
          :"models.#{klass.name.underscore}.#{@message}" ]
      end.flatten
      keys << options.delete(:default)
      keys << :"messages.#{@message}"
      keys << @message if @message.is_a?(String)
      keys << @type unless @type == @message
      keys.compact!
      options.merge!(:default => keys)
      I18n.translate(keys.shift, options)
    end