Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Browse files

`ActiveRecord::Base.no_touching` no longer triggers callbacks or star…

…t empty transactions.

Closes #14841.
  • Loading branch information...
commit 4866399054c9facf11bc743c0e0969e6c81f6c31 1 parent d10e2ca
Lucas Mazza lucasmazza authored
6 activerecord/CHANGELOG.md
View
@@ -1,3 +1,9 @@
+* `ActiveRecord::Base.no_touching` no longer triggers callbacks or start empty transactions.
+
+ Fixes #14841.
+
+ *Lucas Mazza*
+
* Fix name collision with `Array#select!` with `Relation#select!`.
Fixes #14752.
2  activerecord/lib/active_record/base.rb
View
@@ -296,7 +296,6 @@ class Base
include Core
include Persistence
- include NoTouching
include ReadonlyAttributes
include ModelSchema
include Inheritance
@@ -318,6 +317,7 @@ class Base
include NestedAttributes
include Aggregations
include Transactions
+ include NoTouching
include Reflection
include Serialization
include Store
21 activerecord/test/cases/timestamp_test.rb
View
@@ -112,7 +112,7 @@ def test_touching_many_attributes_updates_them
previous_starting = task.starting
previous_ending = task.ending
task.touch(:starting, :ending)
-
+
assert_not_equal previous_starting, task.starting
assert_not_equal previous_ending, task.ending
assert_in_delta Time.now, task.starting, 1
@@ -170,6 +170,25 @@ def test_no_touching_threadsafe
assert !@developer.no_touching?
end
+ def test_no_touching_with_callbacks
+ klass = Class.new(ActiveRecord::Base) do
+ self.table_name = "developers"
+
+ attr_accessor :after_touch_called
+
+ after_touch do |user|
+ user.after_touch_called = true
+ end
+ end
+
+ developer = klass.first
+
+ klass.no_touching do
+ developer.touch
+ assert_not developer.after_touch_called
+ end
+ end
+
def test_saving_a_record_with_a_belongs_to_that_specifies_touching_the_parent_should_update_the_parent_updated_at
pet = Pet.first
owner = pet.owner
Please sign in to comment.
Something went wrong with that request. Please try again.