这是类别模型。一个类别可以属于另一个类别。

class Category < ActiveRecord::Base
  attr_accessible :title, :parent_id

  has_and_belongs_to_many :products, :join_table => :products_categories

  belongs_to :parent, :foreign_key => "parent_id", :class_name => "Category"
  has_many :categories, :foreign_key => "parent_id", :class_name => "Category"
end

这是产品型号:
class Product < ActiveRecord::Base
  attr_accessible :comment, location_id, :category_ids
  has_and_belongs_to_many :categories, :join_table => :products_categories
  belongs_to :location
end

在产品的Active Admin表单中,我要根据其parent_id对复选框进行分层排序,例如
  • 类别1 []
  • 类别2 []
  • 类别3 []
  • 类别6 []
  • 类别4 []
  • 类别5 []
  • 类别7 []

  • 以下是我对表格的了解:
    ActiveAdmin.register Product do
        form do |f|
          f.inputs "Product" do
          f.input :comment
          f.input :categories, :as => :check_boxes
          f.input :location
        end
        f.buttons
      end
    end
    

    目前,该表单会拉入复选框并正确保存数据,但是我不确定从何处开始对它们进行分组。我浏览了文档,但看不到任何明显的内容。

    最佳答案

    用户Hopstream的ActiveAdmin -- How to display category taxonomy? (in tree type hierarchy)问题可能会部分解决此问题。由于Formtastic的存在,它足够不同,因此提出了一些有趣的挑战,也就是说,formastic的直线上升根本无法做到“开箱即用”。

    但是,可以扩展和覆盖Formtastic的Formtastic::Inputs::CheckBoxesInput类,以便通过嵌套逻辑为面条添加功能。幸运的是,这个问题也已经发生在其他人身上。

    Github用户michelson的Formtastic check boxes with awesome_nested_set要点将为您提供一个可以添加到rails应用程序中的类,将acts_as_nested_set行放置在Product模型中,并将Formtastic f.input块所必需的f.inputs "Product"行放置在ActiveAdmin.register块中,该行实际上应在结构上不作任何修改您的模型为:
    f.input :categories, :as=>:check_boxes, :collection=>Category.where(["parent_id is NULL"]) , :nested_set=>true

    10-05 19:20