diff options
Diffstat (limited to 'activerecord')
-rw-r--r-- | activerecord/lib/active_record/counter_cache.rb | 2 | ||||
-rw-r--r-- | activerecord/test/cases/counter_cache_test.rb | 10 |
2 files changed, 11 insertions, 1 deletions
diff --git a/activerecord/lib/active_record/counter_cache.rb b/activerecord/lib/active_record/counter_cache.rb index c654d4703a..f4ee008a12 100644 --- a/activerecord/lib/active_record/counter_cache.rb +++ b/activerecord/lib/active_record/counter_cache.rb @@ -105,7 +105,7 @@ module ActiveRecord end if touch - object = find(id) + object = find(id.is_a?(Array) ? id.first : id) updates << object.class.send(:sanitize_sql_for_assignment, touch_updates(object, touch)) end diff --git a/activerecord/test/cases/counter_cache_test.rb b/activerecord/test/cases/counter_cache_test.rb index c735e13715..c7d0ba32b4 100644 --- a/activerecord/test/cases/counter_cache_test.rb +++ b/activerecord/test/cases/counter_cache_test.rb @@ -227,6 +227,16 @@ class CounterCacheTest < ActiveRecord::TestCase end end + test "update counters of multiple records with touch: true" do + t1, t2 = topics(:first, :second) + + assert_touching t1, :updated_at do + assert_difference ["t1.reload.replies_count", "t2.reload.replies_count"], 2 do + Topic.update_counters([t1.id, t2.id], replies_count: 2, touch: true) + end + end + end + test "update multiple counters with touch: true" do assert_touching @topic, :updated_at do Topic.update_counters(@topic.id, replies_count: 2, unique_replies_count: 2, touch: true) |