diff --git a/activemodel/lib/active_model/errors.rb b/activemodel/lib/active_model/errors.rb
index <HASH>..<HASH> 100644
--- a/activemodel/lib/active_model/errors.rb
+++ b/activemodel/lib/active_model/errors.rb
@@ -228,15 +228,15 @@ module ActiveModel
         next if messages.empty?
 
         if attribute == :base
-          messages.each {|m| full_messages << m }
+          full_messages.concat messages
         else
           attr_name = attribute.to_s.gsub('.', '_').humanize
           attr_name = @base.class.human_attribute_name(attribute, :default => attr_name)
           options = { :default => "%{attribute} %{message}", :attribute => attr_name }
 
-          messages.each do |m|
-            full_messages << I18n.t(:"errors.format", options.merge(:message => m))
-          end
+          full_messages.concat messages.map { |m|
+            I18n.t(:"errors.format", options.merge(:message => m))
+          }
         end
       end
use 1 call to concat rather than calling << n times