Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

counter_cache with has_many :through

Tags:

I just created a counter_cache field and the controller looks like this.

 @users = User.where(:sex => 2).order('received_likes_count') 

The association in User.rb is

 has_many :received_likes, :through => :attachments, :source => :likes, :dependent => :destroy 

Problem is that counter_cache is declared in the belong_to of Like.rb and I don't know how to tell it that is for the has_many :through association.

  belongs_to :user, :counter_cache => :received_likes 
like image 879
Martin Avatar asked Mar 10 '11 07:03

Martin


1 Answers

You have previous

    class Product       has_and_belongs_to_many :categories     end      class Category       has_and_belongs_to_many :products     end 

and migration

    class CreateCategoriesProducts < ActiveRecord::Migration       def change         create_table :categories_products, id: false do |t|           t.references :category           t.references :product         end          add_index :categories_products, [:category_id, :product_id]       end     end 

now change all to

    class Product       has_many :categories_products, dependent: :destroy       has_many :categories, through: :categories_products     end      class Category       has_many :categories_products, dependent: :destroy       has_many :products, through: :categories_products     end 

and new one

    class CategoriesProduct < ActiveRecord::Base       # this model uses table "categories_products" as it is       # column products_count is in the table "categories"       belongs_to :category, counter_cache: :products_count       belongs_to :product     end 
like image 97
Aivils Štoss Avatar answered Oct 15 '22 03:10

Aivils Štoss