活动管理员嵌套资源表单生成

active admin nested resources form generation

我能够为嵌套属性表单生成所需的布局,如下图所示:

嵌套形式的代码:

f.inputs 'Line Item/s' do
    f.has_many :payment_line_items, heading: false do |form|
      table do
        tr do
          th 'Description'
          th 'Qty'
          th 'Unit Price'
          th 'Amount'
        end
        tr do
          td {form.input :description, label: false}
          td {form.input :quantity, label: false}
          td {form.input :unit_price, label: false}
          td {form.input :amount, label: false}
        end
      end
    end
  end

当我点击 'add new payment line Item button' 时,我得到了如下图片:

我只想在单击 'add new payment line Item' 按钮时复制整个 table 或仅复制带有表单部分的 tr。我怎样才能做到这一点?

我在我的一个 activeadmin 项目中遇到了类似的问题。 fieldset 元素使用可以设置样式的 li 元素。因此,请检查表单正在使用的 class,然后将类似的内容添加到 app/assets/stylesheets/active_admin.scss 的末尾。这里我假设周围表格上的 css class 是 line_items。诀窍是 li 元素上的 inline-block 属性,不过您可能需要 fiddle 和 css 属性。

form.line_items fieldset.has_many_fields ol > li > label { display: none; }
form.line_items fieldset.has_many_fields:first-child ol > li > label { display: block; }
form.line_items fieldset.has_many_fields ol > li { display: inline-block; padding: 5px; width: 18%; float:left;}
form.line_items fieldset.has_many_fields ol > li.has_many_delete { margin-top:20px; margin-left: -36px;}
form.line_items fieldset.has_many_fields ol > li > label { width: auto; padding-right: 10px;}
form.line_items fieldset.has_many_fields ol > li > div > label.label { width: auto; padding-right: 10px;}
form.line_items fieldset.has_many_fields ol > li > a.has_many_remove { margin-top:20px; }
form.line_items fieldset.has_many_fields ol > li > p.inline-errors { margin: 0.3em 0 0 0; }

这可行,但您必须将表格重写为:

  f.inputs 'Line Item/s' do
    f.has_many :payment_line_items, heading: false do |form|
      form.input :description, label: false
      form.input :quantity, label: false
      form.input :unit_price, label: false
      form.input :amount, label: false                    
    end
  end

如果您希望用户能够销毁订单项,您必须像这样设置您的关联和 permit_params:

在你的模型中

accepts_nested_attributes_for :line_items, :allow_destroy => true

并且在activeadmin注册块中:

permit_params \
  :line_items_attributes => [:id, :description, :quantity, :unit_price, :amount, :_destroy]

祝你好运!