From fcfacdfdc92e18aed51ee5a5ef3812cb40ce3987 Mon Sep 17 00:00:00 2001 From: Ross Kaffenberger Date: Mon, 19 Mar 2012 18:24:40 -0400 Subject: [PATCH] Optimize impressionist_count query via arel count with distinct option --- app/models/impressionist/impressionable.rb | 5 +---- test_app/spec/models/counter_caching_spec.rb | 2 +- 2 files changed, 2 insertions(+), 5 deletions(-) diff --git a/app/models/impressionist/impressionable.rb b/app/models/impressionist/impressionable.rb index e09addd..30174e0 100644 --- a/app/models/impressionist/impressionable.rb +++ b/app/models/impressionist/impressionable.rb @@ -26,10 +26,7 @@ module Impressionist def impressionist_count(options={}) options.reverse_merge!(:filter=>:request_hash, :start_date=>nil, :end_date=>Time.now) imps = options[:start_date].blank? ? impressions : impressions.where("created_at>=? and created_at<=?",options[:start_date],options[:end_date]) - if options[:filter]!=:all - imps = imps.select(options[:filter]).group(options[:filter]) - end - imps.all.size + options[:filter] == :all ? imps.count : imps.count(options[:filter], :distinct => true) end def update_counter_cache diff --git a/test_app/spec/models/counter_caching_spec.rb b/test_app/spec/models/counter_caching_spec.rb index 88cbd73..ba4f5f9 100644 --- a/test_app/spec/models/counter_caching_spec.rb +++ b/test_app/spec/models/counter_caching_spec.rb @@ -21,7 +21,7 @@ describe Impression do describe "#update_counter_cache" do it "should update the counter cache column to reflect the correct number of impressions" do lambda { - Impression.create(:impressionable_type => @widget.class.name, :impressionable_id => @widget.id) + @widget.impressions.create(:request_hash => 'abcd1234') @widget.reload }.should change(@widget, :impressions_count).from(0).to(1) end