Permalink
Browse files

Merge pull request #7972 from scottwillson/fix-double-presence-of-err…

…ors-2

Fix bug with presence validation of associations.
  • Loading branch information...
2 parents c432c74 + 25262bc commit bf876af7b33b8f6a4c91353e2751686f1d0fa934 @josevalim josevalim committed Oct 17, 2012
@@ -1,5 +1,10 @@
## Rails 4.0.0 (unreleased) ##
+* Fix bug with presence validation of associations. Would incorrectly add duplicated errors
+ when the association was blank. Bug introduced in 1fab518c6a75dac5773654646eb724a59741bc13.
+
+ *Scott Willson*
+
* Fix bug where sum(expression) returns string '0' for no matching records
Fixes #7439
@@ -5,8 +5,10 @@ def validate(record)
super
attributes.each do |attribute|
next unless record.class.reflect_on_association(attribute)
- value = record.send(attribute)
- if Array(value).all? { |r| r.marked_for_destruction? }
+ associated_records = Array(record.send(attribute))
+
+ # Superclass validates presence. Ensure present records aren't about to be destroyed.
+ if associated_records.present? && associated_records.all? { |r| r.marked_for_destruction? }
record.errors.add(attribute, :blank, options)
end
end
@@ -18,6 +18,13 @@ def test_validates_presence_of_non_association
assert b.valid?
end
+ def test_validates_presence_of_has_one
+ Boy.validates_presence_of(:face)
+ b = Boy.new
+ assert b.invalid?, "should not be valid if has_one association missing"
+ assert_equal 1, b.errors[:face].size, "validates_presence_of should only add one error"
+ end
+
def test_validates_presence_of_has_one_marked_for_destruction
Boy.validates_presence_of(:face)
b = Boy.new

0 comments on commit bf876af

Please sign in to comment.