0

私はgithubにストアアプリケーションを持っています。1. Divisions モデルと 2. Products モデルの 2 つのモデルに counter_cache を実装しようとしています。何らかの理由で、新しい部門を作成するたびに Company モデルのカウンター キャッシュ (divisions_count) が自動的にインクリメントされず、同様に、新しい製品を追加したときに Divisions モデルの products_count がインクリメントされないかどうかわかりません。部門に。

私はレール3.2.11とルビー1.9.3-p327を使用しています

私のアプリケーションは POC レベルのみです。

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

部門.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

カウンター キャッシュの実装用に作成した移行を参照したい場合は、ここで見つけることができます。

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 に答える