在 Active Admin 中为图书添加标签

Add Tags to Books in Active Admin

我在我的项目中使用 ActiveAdmin gem。

我有 2 个模型通过关联使用 has_many。本质上,我有一个 has_many 通过 Book_Mapping Table 标记的 Book 模型。

我希望能够 edit/add 从我在 Active Admin 中的图书表格中为图书添加标签。

但是我无法在我的表单中显示它。谁能帮我创建正确的 Active Admin 表单结构?

型号

class Book < ActiveRecord::Base

  has_many :book_mappings
  has_many :tags, through: :book_mappings

  ##Not sure if I should use this...
  accepts_nested_attributes_for :book_mappings
  accepts_nested_attributes_for :tags

end


class BookMapping < ActiveRecord::Base
  belongs_to :book
  belongs_to :tag
end

class Tag < ActiveRecord::Base

  has_many :book_mappings
  has_many :books, through: :book_mappings

end

ACTIVEADMIN

ActiveAdmin.register Book do

###Should this permit any other params? 
permit_params :title

form do |f|
  f.inputs "Book Detail" do
    f.input :title
  end

  f.has_many :book_mappings do |app_f|
    app_f.inputs "Book Tags" do

      ###Other than a Create Tag button, 
      ###The actual form fields don't appear at all...
      app_f.input :book_tag_id
    end
  end
end

#Show Page (Is there a way to show the selected tags here?)
  show do |pic|
    attributes_table do
      row :title

    end
  end

end

我认为您可能应该注册 Book 模型而不是 CommunityResource,请添加到 permit_params tag_ids: []。表单方法可能如下所示:

form do |f|
  f.inputs "Book Detail" do
    f.input :title
  end

  f.inputs "Tags" do
    f.input :tags, as: :check_boxes
  end

  f.actions
end

当你想在展示页面上显示标签时,你可以在侧边栏中显示标签。

sidebar 'Tags', only: :show, if: proc { book.tags.any? } do
  table_for book.tags do |t|
    t.column('Name') { |tag| tag.name } # it's depends what you want to display  
  end
end