diff options
author | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-02-04 06:03:14 -0800 |
---|---|---|
committer | Rafael Mendonça França <rafaelmfranca@gmail.com> | 2014-02-04 06:03:14 -0800 |
commit | f1a6307a941a6f9c50cf7d196ba4a7bc1252501d (patch) | |
tree | a171065ecb7f840def449ce3046e52aa91b9b1a4 /activerecord | |
parent | 75510a62f17747f9fd9abbc0ee0efc7e6795ae6b (diff) | |
parent | 9b66d6d47f87d31fb360f48542520d9216e77dc9 (diff) | |
download | rails-f1a6307a941a6f9c50cf7d196ba4a7bc1252501d.tar.gz rails-f1a6307a941a6f9c50cf7d196ba4a7bc1252501d.tar.bz2 rails-f1a6307a941a6f9c50cf7d196ba4a7bc1252501d.zip |
Merge pull request #13935 from arthurnn/fix_12566
Make sure transaction state resets after commit
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/transaction_callbacks_test.rb | 15 |
2 files changed, 16 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index c33ffeece0..ec3e8f281b 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -295,7 +295,7 @@ module ActiveRecord def committed! #:nodoc: run_callbacks :commit if destroyed? || persisted? ensure - clear_transaction_record_state + @_start_transaction_state.clear end # Call the +after_rollback+ callbacks. The +force_restore_state+ argument indicates if the record diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index 7e7d95841b..3d64ecb464 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -16,6 +16,11 @@ class TransactionCallbacksTest < ActiveRecord::TestCase after_commit :do_after_commit, on: :create + attr_accessor :save_on_after_create + after_create do + self.save! if save_on_after_create + end + def history @history ||= [] end @@ -107,6 +112,16 @@ class TransactionCallbacksTest < ActiveRecord::TestCase assert_equal [], reply.history end + def test_only_call_after_commit_on_create_and_doesnt_leaky + r = ReplyWithCallbacks.new(content: 'foo') + r.save_on_after_create = true + r.save! + r.content = 'bar' + r.save! + r.save! + assert_equal [:commit_on_create], r.history + end + def test_only_call_after_commit_on_update_after_transaction_commits_for_existing_record_on_touch add_transaction_execution_blocks @first |