Module: ActiveRecord::Transactions
- Defined in:
- ext/active_record/transactions.rb
Overview
See ActiveRecord::Transactions::ClassMethods for documentation.
Instance Method Summary collapse
-
#save! ⇒ Object
See ActiveRecord::Transactions::ClassMethods for detailed documentation.
-
#with_transaction_returning_status ⇒ Object
def touch(*) #:nodoc: with_transaction_returning_status { super } end.
Instance Method Details
#save! ⇒ Object
See ActiveRecord::Transactions::ClassMethods for detailed documentation.
def transaction(options = {}, &block) self.class.transaction(options, &block) end
def destroy #:nodoc:
with_transaction_returning_status { super }
end
def save(*) #:nodoc:
rollback_active_record_state! do
with_transaction_returning_status { super }
end
end
28 29 30 31 32 33 34 |
# File 'ext/active_record/transactions.rb', line 28 def save!(**) #:nodoc: if instance_variable_defined?(:@no_save_transaction) && @no_save_transaction super else with_transaction_returning_status { super } end end |
#with_transaction_returning_status ⇒ Object
def touch(*) #:nodoc:
with_transaction_returning_status { super }
end
41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 |
# File 'ext/active_record/transactions.rb', line 41 def with_transaction_returning_status self.class.with_connection do |connection| transaction_body = proc do status = nil if sunstone? && instance_variable_defined?(:@sunstone_updating) && @sunstone_updating status = yield else ensure_finalize = !connection.transaction_open? connection.transaction do add_to_transaction(ensure_finalize || has_transactional_callbacks?) remember_transaction_record_state status = yield raise ActiveRecord::Rollback unless status end @_last_transaction_return_status = status status end end # TODO: drop this Rails 8.0 compatibility branch when Rails 8.0 # support is dropped, and always use with_pool_transaction_isolation_level. # Rails 8.1 wraps the transaction in a pool-level isolation context; # this API doesn't exist on 8.0, so run the body directly there. if ActiveRecord.respond_to?(:default_transaction_isolation_level) connection.pool.with_pool_transaction_isolation_level(ActiveRecord.default_transaction_isolation_level, connection.transaction_open?, &transaction_body) else transaction_body.call end end end |