Permalink
Browse files

Merge pull request #12748 from dm1try/fix_counter_cache_for_through_a…

…ssociation


Fixes #11079, prevent the counter cache from being decremented twice when destroying a record on a has_many :through association
  • Loading branch information...
2 parents b31b6e6 + dbb7ee1 commit 1a80133392490fead222c98bbdbdf4e189812e43 @senny senny committed Nov 11, 2013
@@ -1,3 +1,10 @@
+* Prevent the counter cache from being decremented twice when destroying
+ a record on a has_many :through association.
+
+ Fixes #11079.
+
+ *Dmitry Dedov*
+
* Unify boolean type casting for `MysqlAdapter` and `Mysql2Adapter`.
`type_cast` will return `1` for `true` and `0` for `false`.
@@ -163,7 +163,7 @@ def delete_records(records, method)
delete_through_records(records)
- if source_reflection.options[:counter_cache]
+ if source_reflection.options[:counter_cache] && method != :destroy
counter = source_reflection.counter_cache_column
klass.decrement_counter counter, records.map(&:id)
end
@@ -514,6 +514,15 @@ def test_update_counter_caches_on_replace_association
assert_equal(post.taggings.count, post.taggings_count)
end
+ def test_update_counter_caches_on_destroy
+ post = posts(:welcome)
+ tag = post.tags.create!(name: 'doomed')
+
+ assert_difference 'post.reload.taggings_count', -1 do
+ tag.tagged_posts.destroy(post)
+ end
+ end
+
def test_replace_association
assert_queries(4){posts(:welcome);people(:david);people(:michael); posts(:welcome).people(true)}

0 comments on commit 1a80133

Please sign in to comment.