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
項目總覆蓋先前標記列表。