0

我在 github 上有一个商店应用程序。我正在尝试为两个模型实现 counter_cache,1. Divisions 模型和 2. Products 模型。出于某种原因,我不确定每当我创建一个新的 Division 时,Company 模型的计数器缓存(divisions_count)不会自动增加,同样,当我添加新产品时, Products_count 不会为 Divisions 模型增加到师。

我在 rails 3.2.11 和 ruby​​ 1.9.3-p327

我的应用程序仅处于 POC 级别。

PFB 模型结构 wrt 公司、部门和产品:-

公司.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

除法.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

产品.rb

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

如果您想参考我为计数器缓存实现创建的迁移,您可以在此处找到它们。

4

1 回答 1

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总是复数。

如果您需要您的部门属于多家公司,您需要使用不同的关联,称为“拥有并属于许多”或简称为 HABTM(参见 [1])。

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

于 2013-08-04T12:02:22.417 回答