diff --git a/activerecord/lib/active_record/touch_later.rb b/activerecord/lib/active_record/touch_later.rb index 3981bd46ad966..7f4c365069a3d 100644 --- a/activerecord/lib/active_record/touch_later.rb +++ b/activerecord/lib/active_record/touch_later.rb @@ -3,10 +3,9 @@ module ActiveRecord # = Active Record Touch Later module TouchLater # :nodoc: - extend ActiveSupport::Concern - - included do - before_commit_without_transaction_enrollment :touch_deferred_attributes + def before_committed! + touch_deferred_attributes if has_defer_touch_attrs? && persisted? + super end def touch_later(*names) # :nodoc: @@ -42,11 +41,9 @@ def surreptitiously_touch(attrs) end def touch_deferred_attributes - if has_defer_touch_attrs? && persisted? - @_skip_dirty_tracking = true - touch(*@_defer_touch_attrs, time: @_touch_time) - @_defer_touch_attrs, @_touch_time = nil, nil - end + @_skip_dirty_tracking = true + touch(*@_defer_touch_attrs, time: @_touch_time) + @_defer_touch_attrs, @_touch_time = nil, nil end def has_defer_touch_attrs? diff --git a/activerecord/lib/active_record/transactions.rb b/activerecord/lib/active_record/transactions.rb index 73001f28f86dd..e6762f4ba3376 100644 --- a/activerecord/lib/active_record/transactions.rb +++ b/activerecord/lib/active_record/transactions.rb @@ -10,9 +10,6 @@ module Transactions included do define_callbacks :commit, :rollback, :before_commit, - :before_commit_without_transaction_enrollment, - :commit_without_transaction_enrollment, - :rollback_without_transaction_enrollment, scope: [:kind, :name] end @@ -266,21 +263,6 @@ def after_rollback(*args, &block) set_callback(:rollback, :after, *args, &block) end - def before_commit_without_transaction_enrollment(*args, &block) # :nodoc: - set_options_for_callbacks!(args) - set_callback(:before_commit_without_transaction_enrollment, :before, *args, &block) - end - - def after_commit_without_transaction_enrollment(*args, &block) # :nodoc: - set_options_for_callbacks!(args) - set_callback(:commit_without_transaction_enrollment, :after, *args, &block) - end - - def after_rollback_without_transaction_enrollment(*args, &block) # :nodoc: - set_options_for_callbacks!(args) - set_callback(:rollback_without_transaction_enrollment, :after, *args, &block) - end - private def set_options_for_callbacks!(args, enforced_options = {}) options = args.extract_options!.merge!(enforced_options) @@ -323,7 +305,6 @@ def touch(*, **) #:nodoc: end def before_committed! # :nodoc: - _run_before_commit_without_transaction_enrollment_callbacks _run_before_commit_callbacks end @@ -335,7 +316,6 @@ def committed!(should_run_callbacks: true) #:nodoc: force_clear_transaction_record_state if should_run_callbacks @_committed_already_called = true - _run_commit_without_transaction_enrollment_callbacks _run_commit_callbacks end ensure @@ -347,7 +327,6 @@ def committed!(should_run_callbacks: true) #:nodoc: def rolledback!(force_restore_state: false, should_run_callbacks: true) #:nodoc: if should_run_callbacks _run_rollback_callbacks - _run_rollback_without_transaction_enrollment_callbacks end ensure restore_transaction_record_state(force_restore_state) diff --git a/activerecord/test/cases/transaction_callbacks_test.rb b/activerecord/test/cases/transaction_callbacks_test.rb index bf2fca02c1d70..dbc450b94f4f2 100644 --- a/activerecord/test/cases/transaction_callbacks_test.rb +++ b/activerecord/test/cases/transaction_callbacks_test.rb @@ -719,75 +719,6 @@ def test_trigger_on_update_where_row_was_deleted end end -class TransactionEnrollmentCallbacksTest < ActiveRecord::TestCase - class TopicWithoutTransactionalEnrollmentCallbacks < ActiveRecord::Base - self.table_name = :topics - - before_commit_without_transaction_enrollment { |r| r.history << :before_commit } - after_commit_without_transaction_enrollment { |r| r.history << :after_commit } - after_rollback_without_transaction_enrollment { |r| r.history << :rollback } - - def history - @history ||= [] - end - end - - def setup - @topic = TopicWithoutTransactionalEnrollmentCallbacks.create! - end - - def test_commit_does_not_run_transactions_callbacks_without_enrollment - @topic.transaction do - @topic.content = "foo" - @topic.save! - end - assert_empty @topic.history - end - - def test_commit_run_transactions_callbacks_with_explicit_enrollment - @topic.transaction do - 2.times do - @topic.content = "foo" - @topic.save! - end - @topic.send(:add_to_transaction) - end - assert_equal [:before_commit, :after_commit], @topic.history - end - - def test_commit_run_transactions_callbacks_with_nested_transactions - @topic.transaction do - @topic.transaction(requires_new: true) do - @topic.content = "foo" - @topic.save! - @topic.send(:add_to_transaction) - end - end - assert_equal [:before_commit, :after_commit], @topic.history - end - - def test_rollback_does_not_run_transactions_callbacks_without_enrollment - @topic.transaction do - @topic.content = "foo" - @topic.save! - raise ActiveRecord::Rollback - end - assert_empty @topic.history - end - - def test_rollback_run_transactions_callbacks_with_explicit_enrollment - @topic.transaction do - 2.times do - @topic.content = "foo" - @topic.save! - end - @topic.send(:add_to_transaction) - raise ActiveRecord::Rollback - end - assert_equal [:rollback], @topic.history - end -end - class CallbacksOnActionAndConditionTest < ActiveRecord::TestCase self.use_transactional_tests = false