Counter_cache for has_many through associations


#1

class User < ActiveRecord::Base
has_many :likes
has_many :liked_things, :through => :likes
end

class Thing < ActiveRecord::Base
has_many :likes
has_many :liked_by_users, :through => :likes
end

class Like < ActiveRecord::Base
belongs_to :user
belongs_to :shot
end

This is my setup, and I have a likes_count column on Things Table. Is
there any way to keep that count updating using counter_cache ? I got it
working counter_cache on has_many association but failing to do same
with
has_many through association.


#2

I am struggling with this as well.

What appears to be happening is that the deletes from the join table do
not fire the counter_cache update.

From what I have read, delete’s do not fire events and that is the way
it is designed in Rails 4.

I have tried multiple workarounds from doing an after_save event,
putting the join table in it’s own model, etc… Nothing I have done
seems to decrement the count.

Anxious to see if any Ruby experts see this post and let us know the
best way to fix this.

John