Rails Counter Cache and its implementation
ruby, ruby-on-rails, ruby-on-rails-plugins
Solution
It looks like polymorphic associations are the way to go for your issue.
Imagine you have a Comment model and 2 models which can be commented : Post and Profile.
In Post and Profile models :
has_many :comments, :as => :resource
In Comment model :
belongs_to :resource, :polymorphic => true, :counter_cache => true
Don't forget to add the "comments_count" column in both Profile and Post models and voilà !
Problem
I am trying to get hold of rails counter cache feature but not able to grasp it completely. Let's say that We have 3 models A B C A belongs to B or C depending upon a field key_type and key_id. key_type tells whether A belongs to B or C so if key_type="B" then the record belongs to B otherwise it belongs to C. In my model a.rb, I have defined following associations: ``` belongs_to :b, :counter_cache => true, :foreign_key => "key_id" belongs_to :c, :counter_cache => true, :foreign_key => "key_id" ``` and in b and c model files ``` has_many :as , :conditions => {:key_type => "B"} has_many :as , :conditions => {:key_type => "C"} ``` Both B and C Models have a column as as_count The problem is every time an object of a is created count is increased in the both the models b and c. Any help is appreciated. Initially i thought that this may work: ``` belongs_to :b, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "B"} belongs_to :c, :counter_cache => true, :foreign_key => "key_id", :conditions => {:key_type => "C"} ``` But this does not help. Thanks