diff --git a/lib/action_view/helpers/dynamic_form.rb b/lib/action_view/helpers/dynamic_form.rb index f127ff9..2cb178d 100644 --- a/lib/action_view/helpers/dynamic_form.rb +++ b/lib/action_view/helpers/dynamic_form.rb @@ -221,7 +221,7 @@ def error_messages_for(*params) message = options.include?(:message) ? options[:message] : locale.t(:body) - error_messages = objects.sum do |object| + error_messages = objects.map do |object| object.errors.full_messages.map do |msg| content_tag(:li, msg) end diff --git a/lib/active_model/dynamic_errors.rb b/lib/active_model/dynamic_errors.rb index e5447d4..643ed20 100644 --- a/lib/active_model/dynamic_errors.rb +++ b/lib/active_model/dynamic_errors.rb @@ -13,27 +13,22 @@ class Errors def full_messages full_messages = [] - each do |attribute, messages| - messages = Array.wrap(messages) - next if messages.empty? - - if attribute == :base - messages.each {|m| full_messages << m } + each do |error| + if error.attribute == :base + full_messages << error.message else - attr_name = attribute.to_s.gsub('.', '_').humanize - attr_name = @base.class.human_attribute_name(attribute, :default => attr_name) + 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 } - messages.each do |m| - if m =~ /^\^/ - options[:default] = "%{message}" - full_messages << I18n.t(:"errors.dynamic_format", options.merge(:message => m[1..-1])) - elsif m.is_a? Proc - options[:default] = "%{message}" - full_messages << I18n.t(:"errors.dynamic_format", options.merge(:message => m.call(@base))) - else - full_messages << I18n.t(:"errors.format", options.merge(:message => m)) - end + 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 @@ -44,4 +39,4 @@ def full_messages end require 'active_support/i18n' -I18n.load_path << File.dirname(__FILE__) + '/locale/en.yml' \ No newline at end of file +I18n.load_path << File.dirname(__FILE__) + '/locale/en.yml'