From: Max Muermann Date: 2006-08-29T07:13:13+09:00 Subject: Re: ActiveRecord, has_many and _count ... I think you want the Rails mailing list... Max On 8/29/06, �ric DUMINIL wrote: > Hi everybody! > > Here are trunks of models from a little rails app I'm developing: > > ########################### > class Country < ActiveRecord::Base > has_many :companies > ........ > > ########################### > class Category < ActiveRecord::Base > has_many :companies > ........ > > ########################### > class Company < ActiveRecord::Base > has_many :employees , :dependent => true > belongs_to :country, :counter_cache => true > belongs_to :category, :counter_cache => true > ........ > > ########################### > > class Employee < ActiveRecord::Base > belongs_to :company, :counter_cache => true > ........ > > ########################### > > > I just would like to know: The right way to create a new company by updating > Country.find(id).companies.size is by doing > Country.find(id).companies.create . Right? > > 1) But what if I'd like to keep in cache companies.size for the category in > which the new company is put? I can't create a company simultaneously using > two parents! > > 2) When I edit the properties of a company, let's say moving from Japan to > Italy, how could I update Japan.companies_count and Italy.companies_count? > I tried to modify the update action of CompanieController: > > ########################### > > def update > @company = Company.find(params[:id]) > @oldcountry=@company.country > if @company.update_attributes(params[:company]) > @newcountry=@company.country > @oldcountry.companies_count=@oldcountry.companies(:refresh).size > @newcountry.companies_count=@newcountry.companies(:refresh).size > flash[:notice] = 'Company was successfully updated.' > redirect_to :action => 'show', :id => @company > else > render :action => 'edit' > end > end > > ########################### > > but that did'nt work. :( > > > 3) Is there a Rails' way to cache the number of Employees directly in > Company.employees_count and Category.employees_count (i.e. through > a "has_many_many" relation)? That would prevent iterating through every > company of a given country/category to get its .employees_count! > > Thanks a lot for your attention, > > Have a good night, > > Eric > > > > >