aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authoreileencodes <eileencodes@gmail.com>2016-02-24 13:45:36 -0500
committereileencodes <eileencodes@gmail.com>2016-02-24 14:33:22 -0500
commit73f8c16601e51480d007dca5a33f2035293bdd23 (patch)
tree4781a2bad3c72de72a71298ef8d6b6cbbb51c4ba /activerecord/lib
parenta5776ed2b2bf8bccb083e303992a174110b3ef7f (diff)
downloadrails-73f8c16601e51480d007dca5a33f2035293bdd23.tar.gz
rails-73f8c16601e51480d007dca5a33f2035293bdd23.tar.bz2
rails-73f8c16601e51480d007dca5a33f2035293bdd23.zip
Ensure suppressor runs before validations
I ran into an issue where validations on a suppressed record were causing validation errors to be thrown on a record that was never going to be saved. There isn't a reason to run the validations on a record that doesn't matter. This change moves the suppressor up the chain to be run on the `save` or `save!` in the validations rather than in persistence. The issue with running it when we hit persistence is that the validations are run first, then we hit persistance, and then we hit the suppressor. The suppressor comes first. The change to the test was required since I added the `validates_presence_of` validations. Adding this alone was enough to demonstrate the issue. I added a new test to demonstrate the new behavior is explict.
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/suppressor.rb6
1 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/suppressor.rb b/activerecord/lib/active_record/suppressor.rb
index b3644bf569..8ec4b48d31 100644
--- a/activerecord/lib/active_record/suppressor.rb
+++ b/activerecord/lib/active_record/suppressor.rb
@@ -37,7 +37,11 @@ module ActiveRecord
end
end
- def create_or_update(*args) # :nodoc:
+ def save(*) # :nodoc:
+ SuppressorRegistry.suppressed[self.class.name] ? true : super
+ end
+
+ def save!(*) # :nodoc:
SuppressorRegistry.suppressed[self.class.name] ? true : super
end
end