aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord
diff options
context:
space:
mode:
authorJosé Valim <jose.valim@gmail.com>2010-01-14 01:43:57 +0100
committerJosé Valim <jose.valim@gmail.com>2010-01-14 01:46:27 +0100
commit363545aa20014c56f6da223acc4a46de5c873143 (patch)
tree70c650fe783a3d2ca3f659bd89de88fa2607c999 /activerecord
parent35933822dec7be3f895c7a3f1440d72c982aebdd (diff)
downloadrails-363545aa20014c56f6da223acc4a46de5c873143.tar.gz
rails-363545aa20014c56f6da223acc4a46de5c873143.tar.bz2
rails-363545aa20014c56f6da223acc4a46de5c873143.zip
Different nested validations should not be ignore [#3638 status:resolved]
Diffstat (limited to 'activerecord')
-rw-r--r--activerecord/lib/active_record/autosave_association.rb3
-rw-r--r--activerecord/test/cases/autosave_association_test.rb8
2 files changed, 10 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/autosave_association.rb b/activerecord/lib/active_record/autosave_association.rb
index 7c4e81a617..e178cb4ef2 100644
--- a/activerecord/lib/active_record/autosave_association.rb
+++ b/activerecord/lib/active_record/autosave_association.rb
@@ -260,7 +260,8 @@ module ActiveRecord
if reflection.options[:autosave]
association.errors.each do |attribute, message|
attribute = "#{reflection.name}.#{attribute}"
- errors[attribute] << message if errors[attribute].empty?
+ errors[attribute] << message
+ errors[attribute].uniq!
end
else
errors.add(reflection.name)
diff --git a/activerecord/test/cases/autosave_association_test.rb b/activerecord/test/cases/autosave_association_test.rb
index 7be605ed95..cc36a6dc5b 100644
--- a/activerecord/test/cases/autosave_association_test.rb
+++ b/activerecord/test/cases/autosave_association_test.rb
@@ -794,6 +794,14 @@ class TestAutosaveAssociationOnAHasOneAssociation < ActiveRecord::TestCase
assert @pirate.errors[:catchphrase].any?
end
+ def test_should_not_ignore_different_error_messages_on_the_same_attribute
+ Ship.validates_format_of :name, :with => /\w/
+ @pirate.ship.name = ""
+ @pirate.catchphrase = nil
+ assert @pirate.invalid?
+ assert_equal ["can't be blank", "is invalid"], @pirate.errors[:"ship.name"]
+ end
+
def test_should_still_allow_to_bypass_validations_on_the_associated_model
@pirate.catchphrase = ''
@pirate.ship.name = ''