instance method
generate_message
Ruby on Rails 3.0.20
Since v3.0.20Signature
generate_message(attribute, type = :invalid, options = {})
Translates an error message in its default scope (activemodel.errors.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 also, it returns the translation of the default message (e.g. activemodel.errors.messages.MESSAGE). The translated model name, translated attribute name and the value are available for interpolation.
When using inheritance 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>activemodel.errors.models.admin.attributes.title.blank</li> <li>activemodel.errors.models.admin.blank</li> <li>activemodel.errors.models.user.attributes.title.blank</li> <li>activemodel.errors.models.user.blank</li> <li>any default you provided through the options hash (in the activemodel.errors scope)</li> <li>activemodel.errors.messages.blank</li> <li>errors.attributes.title.blank</li> <li>errors.messages.blank</li> </ol>
Parameters
-
attributereq -
typeopt = :invalid -
optionsopt = {}
Source
# File activemodel/lib/active_model/errors.rb, line 286
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}.#{type}" ]
end
defaults << options.delete(:message)
defaults << :"#{@base.class.i18n_scope}.errors.messages.#{type}"
defaults << :"errors.attributes.#{attribute}.#{type}"
defaults << :"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
Defined in activemodel/lib/active_model/errors.rb line 286
· View on GitHub
· Improve this page
· Find usages on GitHub
Defined in ActiveModel::Errors