diff options
author | brainopia <brainopia@evilmartians.com> | 2015-01-12 02:38:22 +0300 |
---|---|---|
committer | brainopia <brainopia@evilmartians.com> | 2015-01-16 03:50:29 +0300 |
commit | eb72e349b205c47a64faa5d6fe9f831aa7fdddf3 (patch) | |
tree | 7f4c2ff107dd4e723be8238d1803a2dfb98a7e0d /activerecord/lib | |
parent | 090c5211ced7b728df6176d5c9fc7437c107beaf (diff) | |
download | rails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.tar.gz rails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.tar.bz2 rails-eb72e349b205c47a64faa5d6fe9f831aa7fdddf3.zip |
after_commit runs after transactions with non-joinable parents
after_commit callbacks run after committing a transaction whose parent
is not `joinable?`: un-nested transactions, transactions within test
cases, and transactions in `console --sandbox`.
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/connection_adapters/abstract/transaction.rb | 15 |
1 files changed, 11 insertions, 4 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb index 7535e9147a..84e5386c20 100644 --- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb @@ -142,7 +142,6 @@ module ActiveRecord def commit connection.commit_db_transaction super - commit_records end end @@ -159,14 +158,22 @@ module ActiveRecord else SavepointTransaction.new(@connection, "active_record_#{@stack.size}", options) end + @stack.push(transaction) transaction end def commit_transaction - transaction = @stack.pop - transaction.commit - transaction.records.each { |r| current_transaction.add_record(r) } + inner_transaction = @stack.pop + inner_transaction.commit + + if current_transaction.joinable? + inner_transaction.records.each do |r| + current_transaction.add_record(r) + end + else + inner_transaction.commit_records + end end def rollback_transaction |