我能够为嵌套属性表单生成所需的布局,如下图所示:
嵌套表单的代码:
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
当我点击“添加新的付款行项目按钮”时,我得到的图像如下:
当我单击“添加新的付款行项目”按钮时,我只想复制整个表格或表格部分的tr。我该怎么做?
答案 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]
祝你好运!