主动管理嵌套资源表单生成

时间:2018-11-27 01:53:11

标签: ruby-on-rails ruby activeadmin

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

form layout I want

嵌套表单的代码:

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

当我点击“添加新的付款行项目按钮”时,我得到的图像如下:

after adding the line item

当我单击“添加新的付款行项目”按钮时,我只想复制整个表格或表格部分的tr。我该怎么做?

1 个答案:

答案 0 :(得分:1)

在我的一个activeadmin项目中,我遇到了类似的问题。 fieldset元素使用可以设置样式的li元素。因此,请检查表单使用的类,然后在app/assets/stylesheets/active_admin.scss的末尾添加类似的内容。在这里,我假设周围形式的css类为line_items。诀窍是inline-block元素上的li属性,不过您可能不得不摆弄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

如果您希望用户能够销毁订单项,则必须为其设置关联和allow_params,如下所示:

在您的模型中

accepts_nested_attributes_for :line_items, :allow_destroy => true

在activeadmin注册块中:

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

祝你好运!