是否可以使用 acts-as-taggable-on 管理所有标签(添加、编辑和删除)

Is it possible to manage all tags (add, edit and delete) with acts-as-taggable-on

我使用 acts-as-taggable-on gem 只有一个(默认)标签列表。我想知道是否可以创建一个表单来管理具有以下功能的标签。 (浏览了所有答案,只找到了 Activeadmin 的解决方案。)

  1. 我设法使用 ActsAsTaggableOn::Tag.all 获得了所有标签(跨关联模型)的列表。
  2. 我希望能够编辑每个标签名称(文本输入字段)。
  3. 我希望能够删除(销毁)标签(复选框)。
  4. 最后,我希望能够将标签添加到列表中,因为我们只使用用户可以添加到不同模型的类别。 (也许 find_or_create_with_like_by_name

如何构造 1-3 和 4 两种形式? acts_as_taggable 有可能吗?感谢您提前提供任何提示。

您编辑并向对象添加标签。所以如果你有一个照片模型,你会做.. /photos/1/edit 来编辑照片和标签......就像你添加它们一样。为此,您的照片模型上有一列。问题 4 我不明白...你想给他们一个标签列表供他们选择吗?如果是这样,这也很容易使用集合 select.

如果您进行搜索,您会发现大量表单示例。

自己解决了。

查看

添加标签

form_tag "/tags" do
  text_field_tag :name
  submit_tag "Add tag"

更新和删除标签

@tags.each do |tag|
  text_field_tag "tags[#{tag.id}]name", tag.name, class: 'name'
  <button class="update-tag radius small">Save</button>
  <button class="delete-tag radius small">Delete</button>


$(function(){
  $(".delete-tag").on("click", function(){
    var row = $(this).closest("tr");
    $.post("/tags/" + row.data("id"), {_method: "DELETE"}, function(){
      row.remove();
    })
  })

  $(".update-tag").on("click", function(){
    var row = $(this).closest("tr");
    $.post("/tags/" + row.data("id"), {_method: "PUT", name: row.find('.name').val()})
  })
})

控制器

class TagsController < ApplicationController
  def create
    name = params[:name]
    ActsAsTaggableOn::Tag.create(name: name)
    redirect_to :back
  end

  def destroy
    tag = ActsAsTaggableOn::Tag.find(params[:id])
    tag.destroy
    render json: {success: true}
  end

  def update
    tag = ActsAsTaggableOn::Tag.find(params[:id])
    tag.update_attributes(name: params[:name])
    render json: {success: true}
  end
end