1

とモデルmany-to-manyの間に関連付けがPostあります。Tag

post.rb:

 has_many :taggings, dependent: :destroy  
 has_many :tags, through: :taggings

タグ.rb:

has_many :taggings, :dependent => :destroy  
has_many :posts, :through => :taggings

タグ付け:

attr_accessible :tag_id, :post_id

belongs_to :post
belongs_to :tag

すべてのタグと各タグの投稿数を一覧表示するページが必要です。

そこでposts_count、タグに列を追加しました:

  create_table "tags", :force => true do |t|
    t.string   "name"
    t.datetime "created_at",                 :null => false
    t.datetime "updated_at",                 :null => false
    t.integer  "posts_count", :default => 0, :null => false
  end

以前にカウンターキャッシュを使用しました:

返信.rb:

 belongs_to :post, :counter_cache => true

しかし、この関連付けでそれを行う方法がわかりませんmany-to-many。何か案は?

4

1 に答える 1

3

タグには共通の :counter_cache オプションを使用します。投稿に属する (1 つだけの) タグ付けオブジェクトをカウントするという事実にもかかわらず、これはあなたが探しているものです。

# tagging:

attr_accessible :tag_id, :post_id

belongs_to :post
belongs_to :tag, :counter_cache => :posts_count

validates_uniqueness_of :tag_id, :scope => :post_id

バリデーターは、同じ投稿に対して複数の同一のタグが作成されるのを防ぐため、レコードの重複を避けることができます。

于 2012-12-27T16:21:50.967 に答える