vendor/rails/activerecord/lib/active_record/validations.rb
# Translates an error message in it's default scope (<tt>activerecord.errrors.messages</tt>).
# Error messages are first looked up in <tt>models.MODEL.attributes.ATTRIBUTE.MESSAGE</tt>, if it's not there, 
# it's looked up in <tt>models.MODEL.MESSAGE</tt> and if that is not there it returns the translation of the 
# default message (e.g. <tt>activerecord.errors.messages.MESSAGE</tt>). The translated model name, 
# translated attribute name and the value are available for interpolation.
#
# When using inheritence in your models, it will check all the inherited models too, but only if the model itself
# hasn't been found. Say you have <tt>class Admin < User; end</tt> and you wanted the translation for the <tt>:blank</tt>
# error +message+ for the <tt>title</tt> +attribute+, it looks for these translations:
# 
# <ol>
# <li><tt>activerecord.errors.models.admin.attributes.title.blank</tt></li>
# <li><tt>activerecord.errors.models.admin.blank</tt></li>
# <li><tt>activerecord.errors.models.user.attributes.title.blank</tt></li>
# <li><tt>activerecord.errors.models.user.blank</tt></li>
# <li><tt>activerecord.errors.messages.blank</tt></li>
# <li>any default you provided through the +options+ hash (in the activerecord.errors scope)</li>
# </ol>
Translates an error message in it's default scope (activerecord.errrors.messages).
Error messages are first looked up in models.MODEL.attributes.ATTRIBUTE.MESSAGE, if it's not there,
it's looked up in models.MODEL.MESSAGE and if that is not there it returns the translation of the
default message . The translated model name,
translated attribute name and the value are available for interpolation.

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


Translates an error message in it ' s default scope ( activerecord . errrors . messages ) . Error messages are first looked up in models . MODEL . attributes . ATTRIBUTE . MESSAGE if it ' s not there it ' s looked up in models . MODEL . MESSAGE and if that is not there it returns the translation of the default message . The translated model name translated attribute name and the value are available for interpolation . When using inheritence in your models it will check all the inherited models too but only if the model itself hasn ' t been found . Say you have class Admin < User ; end and you wanted the translation for the : blank error + message + for the title + attribute + it looks for these translations .
def generate_message(attribute, message = :invalid, options = {})
      defaults = @base.class.self_and_descendents_from_active_record.map do |klass| 
        [ :"models.#{klass.name.underscore}.attributes.#{attribute}.#{message}", 
          :"models.#{klass.name.underscore}.#{message}" ]
      end
      defaults << options.delete(:default)
      defaults = defaults.compact.flatten << :"messages.#{message}"
      model_name = @base.class.name
      key = defaults.shift
      value = @base.respond_to?(attribute) ? @base.send(attribute) : nil
      options = { :default => defaults,
        :model => @base.class.human_name,
        :attribute => @base.class.human_attribute_name(attribute.to_s),
        :value => value,
        :scope => [:activerecord, :errors]
      }.merge(options)
      I18n.translate(key, options)
    end
def generate_message ( attribute , message = :invalid , options = { } ) defaults = @base . class . self_and_descendents_from_active_record . map do | klass | [ :" models. #{ klass . name . underscore } .attributes. #{ attribute } . #{ message } " , :" models. #{ klass . name . underscore } . #{ message } " ] end defaults << options . delete ( :default ) defaults = defaults . compact . flatten << :" messages. #{ message } " model_name = @base . class . name key = defaults . shift value = @base . respond_to? ( attribute ) ? @base . send ( attribute ) : nil options = { :default => defaults , :model => @base . class . human_name , :attribute => @base . class . human_attribute_name ( attribute . to_s ) , :value => value , :scope => [ :activerecord , :errors ] } . merge ( options ) I18n . translate ( key , options ) end
Translates an error message in it's default scope (<tt>activerecord.errrors.messages</tt>).
Translates an error message in it ' s default scope ( <tt > activerecord . errrors . messages< / tt > ) .
attribute
message
options