diff options
author | Godfrey Chan <godfreykfc@gmail.com> | 2014-01-18 14:26:17 -0800 |
---|---|---|
committer | Godfrey Chan <godfreykfc@gmail.com> | 2014-01-18 14:26:17 -0800 |
commit | 3c354bd83b2f429e8fa20c8cf3ae1fd8b1c736f2 (patch) | |
tree | 8bb212033c613dc78e9f8d808254537fa62f2193 /activerecord/lib | |
parent | 35b85d2e7dee6688be3f22fca4d28967a2ca81ce (diff) | |
parent | 7386ffc781fca07a0c656db49fdb54678caef809 (diff) | |
download | rails-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.rb | 4 | ||||
-rw-r--r-- | activerecord/lib/active_record/core.rb | 9 |
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 |