Module: Activerecord::Transactionable

Extended by:
ActiveSupport::Concern
Defined in:
lib/activerecord/transactionable.rb,
lib/activerecord/transactionable/result.rb,
lib/activerecord/transactionable/version.rb

Overview

SRP: Provides an example of correct behavior for wrapping transactions. NOTE: Rails’ transactions are per-database connection, not per-model, nor per-instance,

see: http://api.rubyonrails.org/classes/ActiveRecord/Transactions/ClassMethods.html

Defined Under Namespace

Modules: ClassMethods, Version Classes: Result

Constant Summary collapse

DEFAULT_NUM_RETRY_ATTEMPTS =
2
DEFAULT_ERRORS_TO_HANDLE_INSIDE_TRANSACTION =
[].freeze
DEFAULT_ERRORS_PREPARE_ON_SELF_INSIDE =
[].freeze
DEFAULT_ERRORS_TO_HANDLE_OUTSIDE_TRANSACTION =
[ActiveRecord::RecordInvalid].freeze
DEFAULT_ERRORS_PREPARE_ON_SELF_OUTSIDE =
[ActiveRecord::RecordInvalid].freeze
ERRORS_TO_DISALLOW_INSIDE_TRANSACTION =

These errors (and possibly others) will invalidate the transaction (on PostgreSQL and possibly other databases). This means that if you did rescue them inside a transaction (or a nested transaction) all subsequent queries would fail.

[
  ActiveRecord::RecordInvalid,
  ActiveRecord::StatementInvalid,
  ActiveRecord::RecordNotUnique,
].freeze
TRANSACTION_METHOD_ARG_NAMES =
%i[
  requires_new
  isolation
  joinable
].freeze
REQUIRES_NEW =
INSIDE_TRANSACTION_ERROR_HANDLERS =
%i[
  rescued_errors
  prepared_errors
  retriable_errors
  reraisable_errors
  num_retry_attempts
].freeze
OUTSIDE_TRANSACTION_ERROR_HANDLERS =
%i[
  outside_rescued_errors
  outside_prepared_errors
  outside_retriable_errors
  outside_reraisable_errors
  outside_num_retry_attempts
].freeze
INSIDE_CONTEXT =
"inside"
OUTSIDE_CONTEXT =
"outside"

Instance Method Summary collapse

Instance Method Details

#transaction_wrapper(**args, &block) ⇒ Object



287
288
289
# File 'lib/activerecord/transactionable.rb', line 287

def transaction_wrapper(**args, &block)
  self.class.transaction_wrapper(object: self, **args, &block)
end