Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Accessing ruby counter cache

I'm playing around with a fork of acts_as_taggable_on_steroids as a learning exercise. The version I'm looking at does some stuff I don't understand to calculate Tag counts. So I thought I'd do a version using PORC (Plain Old Rails Counters):

class Tagging < ActiveRecord::Base #:nodoc:
  belongs_to :tag, :counter_cache => "tagging_counter_cache"
...

I thought tagging_counter_cache was transparently accessed when I access tag.taggings.count but apparently not? Do I really have to access tag.tagging_counter_cache explicitly?

>> tag.taggings.count
  SQL (0.7ms)   SELECT count(*) AS count_all FROM `taggings` WHERE (`taggings`.tag_id = 16) 

Same for size.

It's cool if that's the case but just wanted to check.

like image 576
Julian H Avatar asked May 08 '26 00:05

Julian H


1 Answers

Calling #size on the collection

>> tag.taggings.size

will return the value in the counter cache. Calling #count

>> tag.taggings.count

will always force a sql call to get the latest count.

like image 100
frogandcode Avatar answered May 10 '26 19:05

frogandcode