aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/transactions.rb
diff options
context:
space:
mode:
authorEugene Kenny <elkenny@gmail.com>2018-05-10 00:24:04 +0100
committerEugene Kenny <elkenny@gmail.com>2018-05-10 00:24:04 +0100
commit2f29380c18d7754cefffbc09bebaa2007fb99929 (patch)
treec99673f97154f4b5b8b667f7fae11b21b4ecb3a7 /activerecord/lib/active_record/transactions.rb
parentf507085fa2a7625324e6f4e3ecef9b27dabefb4f (diff)
downloadrails-2f29380c18d7754cefffbc09bebaa2007fb99929.tar.gz
rails-2f29380c18d7754cefffbc09bebaa2007fb99929.tar.bz2
rails-2f29380c18d7754cefffbc09bebaa2007fb99929.zip
Don't clear transaction state after manual rollback
If an `ActiveRecord::Rollback` error was raised by a persistence method (e.g. in an `after_save` callback), this logic would potentially discard the original state of the record from before the transaction, preventing it from being restored later when the transaction was rolled back.
Diffstat (limited to 'activerecord/lib/active_record/transactions.rb')
-rw-r--r--activerecord/lib/active_record/transactions.rb8
1 files changed, 1 insertions, 7 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb
index be4f41050e..6e9dff5796 100644
--- a/activerecord/lib/active_record/transactions.rb
+++ b/activerecord/lib/active_record/transactions.rb
@@ -382,13 +382,7 @@ module ActiveRecord
status = nil
self.class.transaction do
add_to_transaction
- begin
- status = yield
- rescue ActiveRecord::Rollback
- clear_transaction_record_state
- status = nil
- end
-
+ status = yield
raise ActiveRecord::Rollback unless status
end
status