1

我在 a和模型many-to-many之间有关联:PostTag

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 选项。尽管它计算了 Taggings 对象,它属于(仅一个)帖子,但这正是您要寻找的。

# 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

Validator 将防止为相同的帖子创建多个相同的标签,因此您可以避免重复记录。

于 2012-12-27T16:21:50.967 回答