acts_as_taggable_on gem实际上支持这个用例。关键是使用标签所有权特点:
@owner_a.tag(@taggable_object, :with => "list,of,tags", :on => :taggable_attribute)
@owner_b.tag(@taggable_object, :with => "list,of,neat,tags", :on => :taggable_attribute)
@taggable_object.taggable_attribute(@some_user, :locations) # => [#<ActsAsTaggableOn::Tag id: 1, name: "list">...]
这会给你的所有标签的列表,包括独特的业主重复的标签,从而有效地允许每个用户特定的标记一个时间标记的对象。
我用下面这一名单转化为独特标签的哈希值与计数为每个标签:
@taggable_object.taggable_attribute.inject(Hash.new(0)) {|h,i| h[i.name] += 1; h } # => { "list" => 2, ... "neat" => 1 }
我用这个,看看哪些标签,用户已经应用到对象中,使我确定与显示向下/给予好评图标:
@taggable_object.owner_tags_on(@owner_1, :taggable_attribute); # => [#<ActsAsTaggableOn::Tag id: 1, name: "list">...]
记住,作为加标签上使用所有权功能时,所以加入另一@owner_a.tag(:taggable_object, :with => "new,tags"...)
会抹去先前标记在@taggable_object
项目总覆盖先前标记列表。