From c8792c7b2ea4f5fe7a5610225433ea8dd8d0f83e Mon Sep 17 00:00:00 2001 From: Mark McSpadden Date: Wed, 21 Mar 2012 04:34:32 -0400 Subject: Allow manual rollbacks in after_save to reset object correctly --- activerecord/lib/active_record/transactions.rb | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'activerecord/lib') diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 743dfc5a38..64107d86a8 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 -- cgit v1.2.3