aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib
diff options
context:
space:
mode:
authorGodfrey Chan <godfreykfc@gmail.com>2014-01-18 14:26:17 -0800
committerGodfrey Chan <godfreykfc@gmail.com>2014-01-18 14:26:17 -0800
commit3c354bd83b2f429e8fa20c8cf3ae1fd8b1c736f2 (patch)
tree8bb212033c613dc78e9f8d808254537fa62f2193 /activerecord/lib
parent35b85d2e7dee6688be3f22fca4d28967a2ca81ce (diff)
parent7386ffc781fca07a0c656db49fdb54678caef809 (diff)
downloadrails-3c354bd83b2f429e8fa20c8cf3ae1fd8b1c736f2.tar.gz
rails-3c354bd83b2f429e8fa20c8cf3ae1fd8b1c736f2.tar.bz2
rails-3c354bd83b2f429e8fa20c8cf3ae1fd8b1c736f2.zip
Merge pull request #13751 from chancancode/ar_rollback_fix
Restore ActiveRecord states after a rollback for models w/o callbacks
Diffstat (limited to 'activerecord/lib')
-rw-r--r--activerecord/lib/active_record/connection_adapters/abstract/transaction.rb4
-rw-r--r--activerecord/lib/active_record/core.rb9
2 files changed, 7 insertions, 6 deletions
diff --git a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
index 2b6685499a..bc4884b538 100644
--- a/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
+++ b/activerecord/lib/active_record/connection_adapters/abstract/transaction.rb
@@ -23,6 +23,10 @@ module ActiveRecord
@parent = nil
end
+ def finalized?
+ @state
+ end
+
def committed?
@state == :committed
end
diff --git a/activerecord/lib/active_record/core.rb b/activerecord/lib/active_record/core.rb
index cd8690d500..a4fe1efd33 100644
--- a/activerecord/lib/active_record/core.rb
+++ b/activerecord/lib/active_record/core.rb
@@ -397,13 +397,10 @@ module ActiveRecord
end
def update_attributes_from_transaction_state(transaction_state, depth)
- if transaction_state && !has_transactional_callbacks?
+ if transaction_state && transaction_state.finalized? && !has_transactional_callbacks?
unless @reflects_state[depth]
- if transaction_state.committed?
- committed!
- elsif transaction_state.rolledback?
- rolledback!
- end
+ restore_transaction_record_state if transaction_state.rolledback?
+ clear_transaction_record_state
@reflects_state[depth] = true
end