提交 dcb82590 编写于 作者: R Ryuta Kamizono

Don't track implicit `touch` mutation

This partly reverts the effect of d1107f4d.

d1107f4d makes `touch` tracks the mutation whether the `touch` is
occurred by explicit or not.

Existing apps expects that the previous changes tracks only the changes
which is explicit action by users.

I'd revert the implicit `touch` mutation tracking since I'd not like to
break existing apps.

Fixes #36219.
上级 9854efd5
......@@ -177,6 +177,11 @@ def _touch_row(attribute_names, time)
affected_rows = super
if @_skip_dirty_tracking ||= false
clear_attribute_changes(@_touch_attr_names)
return affected_rows
end
changes = {}
@attributes.keys.each do |attr_name|
next if @_touch_attr_names.include?(attr_name)
......@@ -193,7 +198,7 @@ def _touch_row(attribute_names, time)
affected_rows
ensure
@_touch_attr_names = nil
@_touch_attr_names, @_skip_dirty_tracking = nil, nil
end
def _update_record(attribute_names = attribute_names_for_partial_writes)
......
......@@ -44,6 +44,7 @@ def surreptitiously_touch(attrs)
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
......
......@@ -2711,18 +2711,22 @@ def test_association_with_rewhere_doesnt_set_inverse_instance_key
bulb = Bulb.create!
tyre = Tyre.create!
car = Car.create! do |c|
car = Car.create!(name: "honda") do |c|
c.bulbs << bulb
c.tyres << tyre
end
assert_equal [nil, "honda"], car.saved_change_to_name
assert_equal 1, car.bulbs.count
assert_equal 1, car.tyres.count
end
test "associations replace in memory when records have the same id" do
bulb = Bulb.create!
car = Car.create!(bulbs: [bulb])
car = Car.create!(name: "honda", bulbs: [bulb])
assert_equal [nil, "honda"], car.saved_change_to_name
new_bulb = Bulb.find(bulb.id)
new_bulb.name = "foo"
......@@ -2733,7 +2737,9 @@ def test_association_with_rewhere_doesnt_set_inverse_instance_key
test "in memory replacement executes no queries" do
bulb = Bulb.create!
car = Car.create!(bulbs: [bulb])
car = Car.create!(name: "honda", bulbs: [bulb])
assert_equal [nil, "honda"], car.saved_change_to_name
new_bulb = Bulb.find(bulb.id)
......@@ -2765,7 +2771,9 @@ def self.name
test "in memory replacements sets inverse instance" do
bulb = Bulb.create!
car = Car.create!(bulbs: [bulb])
car = Car.create!(name: "honda", bulbs: [bulb])
assert_equal [nil, "honda"], car.saved_change_to_name
new_bulb = Bulb.find(bulb.id)
car.bulbs = [new_bulb]
......@@ -2785,7 +2793,9 @@ def self.name
test "in memory replacement maintains order" do
first_bulb = Bulb.create!
second_bulb = Bulb.create!
car = Car.create!(bulbs: [first_bulb, second_bulb])
car = Car.create!(name: "honda", bulbs: [first_bulb, second_bulb])
assert_equal [nil, "honda"], car.saved_change_to_name
same_bulb = Bulb.find(first_bulb.id)
car.bulbs = [second_bulb, same_bulb]
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册