diff options
author | Tarmo Tänav <tarmo@itech.ee> | 2009-06-10 16:24:32 +0300 |
---|---|---|
committer | Santiago Pastorino <santiago@wyeworks.com> | 2010-07-29 22:37:20 -0300 |
commit | 2ea922bcec333b6484a295b4fee1f4fa75c5704d (patch) | |
tree | d8505adef8028de6cd78d20038d36bea3715257c /activerecord | |
parent | ccd45618ed9a629c9535a5ff84ef5c238befa4ab (diff) | |
download | rails-2ea922bcec333b6484a295b4fee1f4fa75c5704d.tar.gz rails-2ea922bcec333b6484a295b4fee1f4fa75c5704d.tar.bz2 rails-2ea922bcec333b6484a295b4fee1f4fa75c5704d.zip |
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>
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/associations/belongs_to_association.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/associations/belongs_to_associations_test.rb | 4 |
2 files changed, 5 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/associations/belongs_to_association.rb b/activerecord/lib/active_record/associations/belongs_to_association.rb index c2a6495db5..4558872a2b 100644 --- a/activerecord/lib/active_record/associations/belongs_to_association.rb +++ b/activerecord/lib/active_record/associations/belongs_to_association.rb @@ -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 diff --git a/activerecord/test/cases/associations/belongs_to_associations_test.rb b/activerecord/test/cases/associations/belongs_to_associations_test.rb index 4d5769d173..046433820d 100644 --- a/activerecord/test/cases/associations/belongs_to_associations_test.rb +++ b/activerecord/test/cases/associations/belongs_to_associations_test.rb @@ -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 |