diff --git a/activerecord/lib/active_record/validations.rb b/activerecord/lib/active_record/validations.rb index d2d12b8..91e7154 100644 --- a/activerecord/lib/active_record/validations.rb +++ b/activerecord/lib/active_record/validations.rb @@ -211,6 +211,15 @@ module ActiveRecord full_messages end + def attribute_message_pairs + @errors.inject([]) do |result, (attr, messages)| + result + messages.map do |message| + message_text = (attr == 'base' ? message : "#{@base.class.human_attribute_name(attr)} #{message}") + [attr, message_text] + end + end + end + # Returns true if no errors have been added. def empty? @errors.empty? @@ -251,7 +260,7 @@ module ActiveRecord options[:builder].instruct! unless options.delete(:skip_instruct) options[:builder].errors do |e| - full_messages.each { |msg| e.error(msg) } + attribute_message_pairs.each { |(attr,msg)| e.error(msg, :field=>attr) } end end diff --git a/activerecord/test/cases/validations_test.rb b/activerecord/test/cases/validations_test.rb index c20f5ae..b965754 100644 --- a/activerecord/test/cases/validations_test.rb +++ b/activerecord/test/cases/validations_test.rb @@ -1417,8 +1417,8 @@ class ValidationsTest < ActiveRecord::TestCase assert !r.valid? xml = r.errors.to_xml(:skip_instruct => true) assert_equal "", xml.first(8) - assert xml.include?("Title is Wrong Create") - assert xml.include?("Content Empty") + assert xml.include?("Title is Wrong Create") + assert xml.include?("Content Empty") end def test_validation_order