diff options
author | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-16 16:06:49 -0700 |
---|---|---|
committer | Aaron Patterson <aaron.patterson@gmail.com> | 2012-05-16 16:06:49 -0700 |
commit | 8e5f07dabcb2d917105aa7ae678072ab44bd5ad4 (patch) | |
tree | c49851277d417b067ac86ffc16f228b5faf9c469 /activerecord/lib | |
parent | 8bc1e532a92bc259c827f96df61cdb86c5e6baa0 (diff) | |
parent | c8792c7b2ea4f5fe7a5610225433ea8dd8d0f83e (diff) | |
download | rails-8e5f07dabcb2d917105aa7ae678072ab44bd5ad4.tar.gz rails-8e5f07dabcb2d917105aa7ae678072ab44bd5ad4.tar.bz2 rails-8e5f07dabcb2d917105aa7ae678072ab44bd5ad4.zip |
Merge pull request #5535 from markmcspadden/issue_5527_rollbacks
Allow manual rollbacks in after_save to reset object correctly
Diffstat (limited to 'activerecord/lib')
-rw-r--r-- | activerecord/lib/active_record/transactions.rb | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 64e5640791..30e1035300 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -290,7 +290,15 @@ module ActiveRecord status = nil self.class.transaction do add_to_transaction - status = yield + begin + status = yield + rescue ActiveRecord::Rollback + if defined?(@_start_transaction_state) + @_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) - 1 + end + status = nil + end + raise ActiveRecord::Rollback unless status end status |