我試圖從給定的代碼中銷燬標籤,但它不起作用。如何完成?如何從act_as_taggable插件的標籤列表中刪除標籤?
@tag = Tag.find_by_name(params[:name])
@tag.destroy
render :update do |page|
page[:divtag].innerHTML = render :partial => "controls/tag_list"
end
我試圖從給定的代碼中銷燬標籤,但它不起作用。如何完成?如何從act_as_taggable插件的標籤列表中刪除標籤?
@tag = Tag.find_by_name(params[:name])
@tag.destroy
render :update do |page|
page[:divtag].innerHTML = render :partial => "controls/tag_list"
end
您提供的示例似乎已損壞。通常你有一個屬於一個模型的標籤列表(可以說是一個用戶模型)。然後,你可以調用這樣的事情:
# Find a user
@user = User.find_by_name("Bobby")
# Show available tags
@user.tag_list # => ["awesome", "slick", "hefty"] as TagList
# Remove the "slick" tag
@user.tag_list.remove("slick")
# Store change
@user.save
欲瞭解更多信息,看看acts-as-taggable-on readme(不幸的是,去除標籤不解釋)。
謝謝,但我得到了解決它的其他方式, @tag = Tag.find_by_name(params [:name]) @taggings =標記。 find_all_by_tag_id(@ tag.id) 用於在@taggings中加標籤 tagging.delete end @ tag.delete end end – 2010-01-22 05:55:48
如果您有興趣刪除所有標籤,可以發送delete_all
至關係。
簡短的例子
> resource.grades.delete_all
> resource.reload
> resource.grades
=> []
龍例如
> resource.grades
=> [#<ActsAsTaggableOn::Tag id: 336486, name: "Kindergarten", context: nil, sort: 0>,
#<ActsAsTaggableOn::Tag id: 336506, name: "Pre-K", context: nil, sort: 0>]
> resource.grades.delete_all
(0.3ms) BEGIN
SQL (0.5ms) DELETE FROM `taggings` WHERE `taggings`.`taggable_id` = 984643 AND `taggings`.`taggable_type` = 'Resource' AND `taggings`.`tag_id` IN (336486, 336506) AND (taggings.context = 'grades')
(0.2ms) COMMIT
=> [#<ActsAsTaggableOn::Tag id: 336486, name: "Kindergarten", context: nil, sort: 0>,
#<ActsAsTaggableOn::Tag id: 336506, name: "Pre-K", context: nil, sort: 0>]
> resource.reload
Resource Load (0.6ms) SELECT `resources`.* FROM `resources` WHERE `resources`.`id` = 984643 LIMIT 1
=> #<Resource id: ...>
> resource.grades
ActsAsTaggableOn::Tag Load (0.6ms) SELECT `tags`.* FROM `tags` INNER JOIN `taggings` ON `tags`.`id` = `taggings`.`tag_id` WHERE `taggings`.`taggable_id` = 984643 AND `taggings`.`taggable_type` = 'Resource' AND (taggings.context = 'grades')
=> []
ActsAsTaggableOn沒有一個很好的辦法做到這一點內置的(我能找到)。以下是我如何做到的:
首先,找到要刪除的標籤。這應該是一個Array
或ActsAsTaggableOn::Tag::ActiveRecord_AssociationRelation
如果你已經實現acts_as_tagger
:
tags = @user.owned_tags.where(name: my_array_of_tag_names)
如果你想通過所有業主找到標籤(或不使用acts_as_tagger
):
tags = ActsAsTaggableOn::Tag.where(name: my_array_of_tag_names)
然後你遍歷標籤,找到所有的標籤和delete
他們,然後最後delete
標籤。 (請注意,destroy
在這種情況下不起作用)
tags.each do |tag|
ActsAsTaggableOn::Tagging.where(tag_id: tag.id).delete_all
tag.delete
end
這是什麼* act_as_tagg *插件?你能提供一些關於它的更多信息嗎? '@ tag.destroy'應該刪除標籤,所以其他的東西一定是干涉的。 – Veger 2010-01-21 14:32:38
heh意外地偶然發現了它:act-as-taggable-on你最好改變問題的標題 – Veger 2010-01-21 20:09:08
是的朋友,它是同一個「行爲標籤」插件,我通過參數名並顯示錯誤,如 「零不能強制進入Fixnum」 – 2010-01-21 21:02:28