Module: ActiveRecord::Transactions
- Extended by:
- ActiveSupport::Concern
- Included in:
- Base
- Defined in:
- activerecord/lib/active_record/transactions.rb
Overview
See ActiveRecord::Transactions::ClassMethods for documentation.
Defined Under Namespace
Modules: ClassMethods Classes: TransactionError
Constant Summary collapse
- ACTIONS =
[:create, :destroy, :update]
Instance Method Summary collapse
-
#add_to_transaction ⇒ Object
Add the record to the current transaction so that the
after_rollback
andafter_commit
callbacks can be called. -
#committed! ⇒ Object
Call the
after_commit
callbacks. -
#destroy ⇒ Object
:nodoc:.
-
#rollback_active_record_state! ⇒ Object
Reset id and @new_record if the transaction rolls back.
-
#rolledback!(force_restore_state = false) ⇒ Object
Call the
after_rollback
callbacks. -
#save ⇒ Object
:nodoc:.
-
#save! ⇒ Object
:nodoc:.
-
#transaction(options = {}, &block) ⇒ Object
See ActiveRecord::Transactions::ClassMethods for detailed documentation.
-
#with_transaction_returning_status ⇒ Object
Executes
method
within a transaction and captures its return value as a status flag.
Methods included from ActiveSupport::Concern
append_features, extended, included
Instance Method Details
#add_to_transaction ⇒ Object
Add the record to the current transaction so that the after_rollback
and after_commit
callbacks can be called.
312 313 314 315 316 |
# File 'activerecord/lib/active_record/transactions.rb', line 312 def add_to_transaction if self.class.connection.add_transaction_record(self) remember_transaction_record_state end end |
#committed! ⇒ Object
Call the after_commit
callbacks.
Ensure that it is not called if the object was never persisted (failed create), but call it after the commit of a destroyed object.
295 296 297 298 299 |
# File 'activerecord/lib/active_record/transactions.rb', line 295 def committed! #:nodoc: run_callbacks :commit if destroyed? || persisted? ensure clear_transaction_record_state end |
#destroy ⇒ Object
:nodoc:
266 267 268 |
# File 'activerecord/lib/active_record/transactions.rb', line 266 def destroy #:nodoc: with_transaction_returning_status { super } end |
#rollback_active_record_state! ⇒ Object
Reset id and @new_record if the transaction rolls back.
281 282 283 284 285 286 287 288 289 |
# File 'activerecord/lib/active_record/transactions.rb', line 281 def rollback_active_record_state! remember_transaction_record_state yield rescue Exception restore_transaction_record_state raise ensure clear_transaction_record_state end |
#rolledback!(force_restore_state = false) ⇒ Object
Call the after_rollback
callbacks. The force_restore_state
argument indicates if the record state should be rolled back to the beginning or just to the last savepoint.
303 304 305 306 307 308 |
# File 'activerecord/lib/active_record/transactions.rb', line 303 def rolledback!(force_restore_state = false) #:nodoc: run_callbacks :rollback ensure restore_transaction_record_state(force_restore_state) clear_transaction_record_state end |
#save ⇒ Object
:nodoc:
270 271 272 273 274 |
# File 'activerecord/lib/active_record/transactions.rb', line 270 def save(*) #:nodoc: rollback_active_record_state! do with_transaction_returning_status { super } end end |
#save! ⇒ Object
:nodoc:
276 277 278 |
# File 'activerecord/lib/active_record/transactions.rb', line 276 def save!(*) #:nodoc: with_transaction_returning_status { super } end |
#transaction(options = {}, &block) ⇒ Object
See ActiveRecord::Transactions::ClassMethods for detailed documentation.
262 263 264 |
# File 'activerecord/lib/active_record/transactions.rb', line 262 def transaction( = {}, &block) self.class.transaction(, &block) end |
#with_transaction_returning_status ⇒ Object
Executes method
within a transaction and captures its return value as a status flag. If the status is true the transaction is committed, otherwise a ROLLBACK is issued. In any case the status flag is returned.
This method is available within the context of an ActiveRecord::Base instance.
324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 |
# File 'activerecord/lib/active_record/transactions.rb', line 324 def with_transaction_returning_status status = nil self.class.transaction do add_to_transaction begin status = yield rescue ActiveRecord::Rollback @_start_transaction_state[:level] = (@_start_transaction_state[:level] || 0) - 1 status = nil end raise ActiveRecord::Rollback unless status end status end |