计数器缓存不会更新 - 不确定原因

时间:2013-08-04 10:08:22

标签: ruby-on-rails-3 performance has-many-through has-many counter-cache

我在github上有一个stores application。我正在尝试为两个模型实现counter_cache,1。分区模型和2.产品模型。出于某种原因,我不确定每当我创建一个新的部门时,计数器缓存(divisions_count)都不会自动为公司模型增加,同样地,当我添加新产品时,products_count不会为Divisions模型增加到了师。

我在rails 3.2.11和ruby 1.9.3-p327

我的应用程序仅在POC级别,因此请使用现有的UI和功能。

PFB公司,部门和产品的模型结构: -

company.rb

class Company < ActiveRecord::Base
  attr_accessible :contact_no, :email_id, :fax_no, :name, :website, :divisions_count
  has_many :divisions #just added divisions_count to attr_accessible not sure if it helps
  has_many :products, :through => :divisions
end

division.rb

class Division < ActiveRecord::Base
  attr_accessible :company_id, :name, :products_count
#just added products_count to attr_accessible not sure if it helps
  belongs_to :companies, :counter_cache => true
  has_many :products
end

product.rb

class Product < ActiveRecord::Base
  attr_accessible :division_id, :model, :name, :price
  belongs_to :divisions, :counter_cache => true
end

如果您想引用我为计数器缓存实现创建的迁移,您可能会发现它们here

请让我知道我错过了什么。我想这可能是非常愚蠢的事情。请跟我一起出去。

谢谢。

1 个答案:

答案 0 :(得分:0)

我认为问题在于您使用复数名称错误地设置了belongs_to。切换到单数可以解决问题,即

# pseudo diff:

-  belongs_to :companies, :counter_cache => true
+  belongs_to :company, :counter_cache => true

-  belongs_to :divisions, :counter_cache => true
+  belongs_to :division, :counter_cache => true

编辑模型/关联时,我发现想到实际的实例很有帮助。因此,“Windows”分区属于“Microsoft”公司是有道理的,但它属于“Microsoft”公司是没有意义的。或者只记住belongs_to总是单数,has_many总是复数。

如果您需要您的部门属于多个公司,您需要使用一个名为“has and belongs to many”的不同关联或简称HABTM(参见[1])。

[1] http://guides.rubyonrails.org/association_basics.html#the-has-and-belongs-to-many-association