diff -r fe7ff84b69f0 activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb --- a/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb +++ b/activerecord/lib/active_record/connection_adapters/abstract/database_statements.rb @@ -122,6 +122,7 @@ requires_new = options[:requires_new] || !last_transaction_joinable transaction_open = false + rethrow = true begin if block_given? if requires_new || open_transactions == 0 @@ -137,6 +138,7 @@ end rescue Exception => database_transaction_rollback if transaction_open && !outside_transaction? + rethrow = false transaction_open = false decrement_open_transactions if open_transactions == 0 @@ -145,7 +147,7 @@ rollback_to_savepoint end end - raise unless database_transaction_rollback.is_a?(ActiveRecord::Rollback) + raise if rethrow or not database_transaction_rollback.is_a?(ActiveRecord::Rollback) end ensure @transaction_joinable = last_transaction_joinable