提交 c3e3577f 编写于 作者: T Tom Kadwill

Fix counter_cache double increment bug

上级 39144740
...@@ -61,6 +61,7 @@ def require_counter_update? ...@@ -61,6 +61,7 @@ def require_counter_update?
def update_counters_on_replace(record) def update_counters_on_replace(record)
if require_counter_update? && different_target?(record) if require_counter_update? && different_target?(record)
owner.instance_variable_set :@_after_replace_counter_called, true
record.increment!(reflection.counter_cache_column) record.increment!(reflection.counter_cache_column)
decrement_counters decrement_counters
end end
......
...@@ -33,6 +33,8 @@ def belongs_to_counter_cache_after_update(reflection) ...@@ -33,6 +33,8 @@ def belongs_to_counter_cache_after_update(reflection)
if (@_after_create_counter_called ||= false) if (@_after_create_counter_called ||= false)
@_after_create_counter_called = false @_after_create_counter_called = false
elsif (@_after_replace_counter_called ||= false)
@_after_replace_counter_called = false
elsif attribute_changed?(foreign_key) && !new_record? elsif attribute_changed?(foreign_key) && !new_record?
if reflection.polymorphic? if reflection.polymorphic?
model = attribute(reflection.foreign_type).try(:constantize) model = attribute(reflection.foreign_type).try(:constantize)
......
...@@ -700,6 +700,17 @@ def test_custom_counter_cache ...@@ -700,6 +700,17 @@ def test_custom_counter_cache
assert_equal 17, reply.replies.size assert_equal 17, reply.replies.size
end end
def test_replace_counter_cache
topic = Topic.create(title: "Zoom-zoom-zoom")
reply = Reply.create(title: "re: zoom", content: "speedy quick!")
reply.topic = topic
reply.save
topic.reload
assert_equal 1, topic.replies_count
end
def test_association_assignment_sticks def test_association_assignment_sticks
post = Post.first post = Post.first
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册