mirror of
https://github.com/github/rails.git
synced 2026-04-26 03:00:59 -04:00
Don't increment and then decrement the same counter when re-assigning a belongs_to association
[#2786 state:committed] Signed-off-by: Santiago Pastorino <santiago@wyeworks.com>
This commit is contained in:
committed by
Santiago Pastorino
parent
ccd45618ed
commit
2ea922bcec
@@ -22,7 +22,7 @@ module ActiveRecord
|
||||
else
|
||||
raise_on_type_mismatch(record)
|
||||
|
||||
if counter_cache_name && !@owner.new_record?
|
||||
if counter_cache_name && !@owner.new_record? && record.id != @owner[@reflection.primary_key_name]
|
||||
@reflection.klass.increment_counter(counter_cache_name, record.id)
|
||||
@reflection.klass.decrement_counter(counter_cache_name, @owner[@reflection.primary_key_name]) if @owner[@reflection.primary_key_name]
|
||||
end
|
||||
|
||||
@@ -215,6 +215,10 @@ class BelongsToAssociationsTest < ActiveRecord::TestCase
|
||||
|
||||
r1.topic = Topic.find(t2.id)
|
||||
|
||||
assert_no_queries do
|
||||
r1.topic = t2
|
||||
end
|
||||
|
||||
assert r1.save
|
||||
assert_equal 0, Topic.find(t1.id).replies.size
|
||||
assert_equal 1, Topic.find(t2.id).replies.size
|
||||
|
||||
Reference in New Issue
Block a user