File tree Expand file tree Collapse file tree 3 files changed +38
-0
lines changed
lib/active_record/associations Expand file tree Collapse file tree 3 files changed +38
-0
lines changed Original file line number Diff line number Diff line change @@ -139,6 +139,9 @@ def delete(*records)
139
139
140
140
records . each do |record |
141
141
@target . delete ( record )
142
+ if respond_to? ( :cached_counter_attribute_name ) && @owner [ cached_counter_attribute_name ]
143
+ @owner . class . decrement_counter ( cached_counter_attribute_name , @owner . send ( @owner . class . primary_key ) )
144
+ end
142
145
callback ( :after_remove , record )
143
146
end
144
147
end
Original file line number Diff line number Diff line change @@ -536,6 +536,18 @@ def test_deleting
536
536
assert_equal 0 , companies ( :first_firm ) . clients_of_firm ( true ) . size
537
537
end
538
538
539
+ def test_deleting_updates_counter_cache
540
+ post = Post . first
541
+
542
+ post . comments . delete ( post . comments . first )
543
+ post . reload
544
+ assert_equal post . comments ( true ) . size , post . comments_count
545
+
546
+ post . comments . delete ( post . comments . first )
547
+ post . reload
548
+ assert_equal 0 , post . comments_count
549
+ end
550
+
539
551
def test_deleting_before_save
540
552
new_firm = Firm . new ( "name" => "A New Firm, Inc." )
541
553
new_client = new_firm . clients_of_firm . build ( "name" => "Another Client" )
@@ -589,6 +601,14 @@ def test_clearing_an_association_collection
589
601
end
590
602
end
591
603
604
+ def test_clearing_updates_counter_cache
605
+ post = Post . first
606
+
607
+ post . comments . clear
608
+ post . reload
609
+ assert_equal 0 , post . comments_count
610
+ end
611
+
592
612
def test_clearing_a_dependent_association_collection
593
613
firm = companies ( :first_firm )
594
614
client_id = firm . dependent_clients_of_firm . first . id
Original file line number Diff line number Diff line change 2
2
require 'models/post'
3
3
require 'models/person'
4
4
require 'models/reader'
5
+ require 'models/comment'
6
+ require 'models/tag'
7
+ require 'models/tagging'
8
+ require 'models/author'
5
9
6
10
class HasManyThroughAssociationsTest < ActiveRecord ::TestCase
7
11
fixtures :posts , :readers , :people
@@ -81,6 +85,17 @@ def test_delete_association
81
85
assert posts ( :welcome ) . reload . people ( true ) . empty?
82
86
end
83
87
88
+ def test_deleting_updates_counter_cache
89
+ taggable = Tagging . first . taggable
90
+ taggable . taggings . push ( Tagging . new )
91
+ taggable . reload
92
+ assert_equal 1 , taggable . taggings_count
93
+
94
+ taggable . taggings . delete ( taggable . taggings . first )
95
+ taggable . reload
96
+ assert_equal 0 , taggable . taggings_count
97
+ end
98
+
84
99
def test_replace_association
85
100
assert_queries ( 4 ) { posts ( :welcome ) ; people ( :david ) ; people ( :michael ) ; posts ( :welcome ) . people ( true ) }
86
101
You can’t perform that action at this time.
0 commit comments