Avoid scoping update transaction when calling update! on a relation #43192
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem
#33470 reported unexpected scoping when calling ActiveRecord::Relation#update which not only applied the relation's scope to the query for the records to update, but the scope also affected the Active Record callbacks that get triggered from the update. Unfortunately, the fix for that was done just for
update
and not also forupdate!
.Solution
The fix for #33470 was to define ActiveRecord::Relation#update to avoid method_missing being called on the relation, which is where the scoping was being applied. Similarly, this PR defines ActiveRecord::Relation#update! which makes these methods consistent in how scoping is applied again.