Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 如何从act_as_taggable插件的标记列表中删除标记?_Ruby On Rails_Acts As Taggable - Fatal编程技术网

Ruby on rails 如何从act_as_taggable插件的标记列表中删除标记?

Ruby on rails 如何从act_as_taggable插件的标记列表中删除标记?,ruby-on-rails,acts-as-taggable,Ruby On Rails,Acts 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 us

我试图从给定的代码中销毁标记,但它不起作用。如何做到这一点

 @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

有关详细信息,请参阅。遗憾的是,没有解释如何删除标记。

如果您对删除所有标记感兴趣,可以将delete\u all发送到关系

简短的例子

长例子


Actsastaggaleon没有一个我能找到的好方法来做这件事。我是这样做的:

首先,找到要删除的标记。这应该是一个数组或ActsAsTaggableOn::Tag::ActiveRecord\u AssociationRelation

如果您已经实施了acts\u as\u tagger:

tags=@user.owned_tags.wherename:my_array_of_tag_name

如果您希望查找所有所有者的标记,或者不使用acts\u as\u tagger:

tags=actsastaggaleon::Tag.wherename:my_array_of_Tag_name

然后循环遍历标记,找到所有标记并删除它们,最后删除标记。请注意,销毁在这种情况下不起作用

tags.each do |tag|
  ActsAsTaggableOn::Tagging.where(tag_id: tag.id).delete_all
  tag.delete
end

这个act_as_tagg插件是什么?你能提供更多的信息吗@tag.destroy应该删除该标记,因此肯定有其他东西在干扰。Heh无意中发现了它:充当taggable on你最好更改问题的标题Yes friend,,它与taggable插件的作用相同,,我是通过使用params name得到这个结果的,它显示了一个错误,比如nil不能被强制到Fixnum中,谢谢,但是我用另一种方法得到了ans bu解决它,@tag=tag.find_by_nameparms[:name]@taggings=Tagging.find_all_by_tag_id@tag.id用于@taggings tagging.delete end@tag.delete end中的标记
> 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')
=> []
tags.each do |tag|
  ActsAsTaggableOn::Tagging.where(tag_id: tag.id).delete_all
  tag.delete
end