我在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。
请让我知道我错过了什么。我想这可能是非常愚蠢的事情。请跟我一起出去。
谢谢。
答案 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