Better counter_caches


#1

Hey everybody,

Rails currently offers ‘belongs_to :counter_cache’, which is a very
basic replacement for count triggers:

“:counter_cache - caches the number of belonging objects on the
associate class through use of increment_counter and decrement_counter.
The counter cache is incremented when an object of this class is created
and decremented when itâ??s destroyed. This requires that a column named
“#{table_name}_count” (such as comments_count for a belonging Comment
class) is used on the associate class (such as a Post class).”

So, all that’s possible is incrementing/decrementing
“#{table_name}_count” when an item is created or destroyed. I think it’d
be useful if :counter_cache also had this functionality:

  • ability to specify the count columns (I also maintain counts of active
    members, items, etc.; so…“active_members_count, active_items_count,
    …”)

  • ability to specify a function (probably belonging to the parent model)
    which could inspect the child object, which of its properties (like via
    PostgreSQL’s OLD/NEW vars) changed, then update count columns
    accordingly.

Any other thoughts?

Joe