Class: ActiveModel::Errors

Inherits:
Object
  • Object
show all
Defined in:
lib/active_model/dynamic_errors.rb

Instance Method Summary collapse

Instance Method Details

#full_messages ⇒ Object

Redefine the ActiveModel::Errors::full_messages method: Returns all the full error messages in an array. 'Base' messages are handled as usual. Non-base messages are prefixed with the attribute name as usual UNLESS (1) they begin with '^' in which case the attribute name is omitted. E.g. validates_acceptance_of :accepted_terms, :message => '^Please accept the terms of service' (2) the message is a proc, in which case the proc is invoked on the model object. E.g. validates_presence_of :assessment_answer_option_id, :message => Proc.new { |aa| "#ActiveModel::Errors.aaaa.label (#ActiveModel::Errors.aaaa.group_label) is required" } which gives an error message like: Rate (Accuracy) is required



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# File 'lib/active_model/dynamic_errors.rb', line 13

def full_messages
  full_messages = []

  each do |error|
    if error.attribute == :base
      full_messages << error.message
    else
      attr_name = error.attribute.to_s.gsub('.', '_').humanize
      attr_name = @base.class.human_attribute_name(error.attribute, :default => attr_name)
      options = { :default => "%{attribute} %{message}", :attribute => attr_name }

      if error.message =~ /^\^/
        options[:default] = "%{message}"
        full_messages << I18n.t(:"errors.dynamic_format", **options.merge(:message => error.message[1..-1]))
      elsif error.message.is_a? Proc
        options[:default] = "%{message}"
        full_messages << I18n.t(:"errors.dynamic_format", **options.merge(:message => error.message.call(@base)))
      else
        full_messages << I18n.t(:"errors.format", **options.merge(:message => error.message))
      end
    end
  end

  full_messages
end