我在many-to-many
和Post
模型之间建立了Tag
关联:
post.rb:
has_many :taggings, dependent: :destroy
has_many :tags, through: :taggings
tag.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
我之前使用过计数器缓存:
reply.rb:
belongs_to :post, :counter_cache => true
但我不确定如何使用此many-to-many
关联。有什么想法吗?
答案 0 :(得分:3)
对标签使用common:counter_cache选项。尽管它对Taggings对象进行了计数,而且这些对象属于(只有一个)帖子,但这正是你要找的。 p>
# 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将阻止为相同的帖子创建多个相同的标签,因此您可以避免重复记录。