Object
# File lib/active_record/validations.rb, line 21 def initialize(base, attribute, type = nil, options = {}) self.base = base self.attribute = attribute self.type = type || :invalid self.options = options self.message = options.delete(:message) || self.type end
Return user options with default options.
# File lib/active_record/validations.rb, line 121 def default_options options.reverse_merge :scope => [:activerecord, :errors], :model => @base.class.human_name, :attribute => @base.class.human_attribute_name(attribute.to_s), :value => value end
Wraps an error message into a full_message format.
The default full_message format for any locale is "%{attribute} %{message}". One can specify locale specific default full_message format by storing it as a translation for the key :"activerecord.errors.full_messages.format".
Additionally one can specify a validation specific error message format by storing a translation for :"activerecord.errors.full_messages.[message_key]". E.g. the full_message format for any validation that uses :blank as a message key (such as validates_presence_of) can be stored to :"activerecord.errors.full_messages.blank".
Because the message key used by a validation can be overwritten on the validates_* class macro level one can customize the full_message format for any particular validation:
# app/models/article.rb class Article < ActiveRecord::Base validates_presence_of :title, :message => :"title.blank" end # config/locales/en.yml en: activerecord: errors: full_messages: title: blank: This title is screwed!
# File lib/active_record/validations.rb, line 108 def generate_full_message(options = {}) keys = [ :"full_messages.#{@message}", :'full_messages.format', '%{attribute} %{message}' ] options.merge!(:default => keys, :message => self.message) I18n.translate(keys.shift, options) end
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 (e.g. activerecord.errors.messages.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:
<ol> <li>activerecord.errors.models.admin.attributes.title.blank</li> <li>activerecord.errors.models.admin.blank</li> <li>activerecord.errors.models.user.attributes.title.blank</li> <li>activerecord.errors.models.user.blank</li> <li>activerecord.errors.messages.blank</li> <li>any default you provided through the options hash (in the activerecord.errors scope)</li> </ol>
# File lib/active_record/validations.rb, line 65 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
Generated with the Darkfish Rdoc Generator 2.