【发布时间】:2016-10-04 03:17:16
【问题描述】:
我正在使用 Rails 根据一组复杂的嵌套属性自动创建子对象。因此,我需要以非常特殊的方式嵌套参数。显然,我意识到我可以用 JS 构建它们,但是我希望表单的顺序能够自动帮助构建。对于上下文,我有 2 列,由 2 <td>s 表示。每列可以创建新记录或编辑现有记录。当然,要修改现有记录时,必须传递记录的id。
渲染出来的HTML如下:
<td width="50%" style="padding-right:3%" class="logistic-details" data-type="logistics" data-typelogistics="delivery" data-instructions="test instructions" data-id="1" data-amount="20">
<span class="area-to-inject-amount-inputs" data-object="type_logistics" data-type="logistics" data-typelogistics="delivery">
<input class="labeler-response" name="type_logistics_attributes[][id]" type="hidden" value="1">
<input class="labeler-response" name="type_logistics_attributes[][instructions]" type="text" value="test instructions">
</span>
</td>
<td width="50%" style="padding-right:3%" class="logistic-details" data-type="logistics" data-typelogistics="pickup" data-instructions="" data-id="" data-amount="0">
<span class="area-to-inject-amount-inputs" data-object="type_logistics" data-type="logistics" data-typelogistics="pickup" data-actioned="charged">
<input type="hidden" name="type_logistics_attributes[][type_of_logistics]" value="pickup">
<input class="injected-amount-input" type="number" min="0" max="" placeholder="Amount" name="type_logistics_attributes[][charged_amounts_attributes][][amount]" value="20">
<span class="area-to-inject-type-of-amount">
<input type="hidden" name="type_logistics_attributes[][charged_amounts_attributes][][type_of_amount]" value="logistics">
</span>
<input class="labeler-response" name="type_logistics_attributes[][instructions]" type="text" placeholder="Enter address and instructions">
</span>
</td>
在这种情况下,第一个 <td> 正在修改 id 为 1 的现有记录,而第二个 <td> 正在提供创建新记录的参数。创建新记录时,还会创建子 charged_amounts。因此,这些是我期望的参数:
"type_logistics_attributes"=>[
{"id"=>"1", "instructions"=>"test instructions"},
{"type_of_logistics"=>"pickup", "charged_amounts_attributes"=>[{"amount"=>"40", "type_of_amount"=>"logistics"}], "instructions" => "123 Fake street"}
]
相反,我得到以下内容:
"type_logistics_attributes"=>[
{"id"=>"1", "type_of_logistics"=>"pickup", "instructions"=>"test instructions", "charged_amounts_attributes"=>[{"amount"=>"40", "type_of_amount"=>"logistics"}]},
{"instructions"=>"123 Fake street"}
]
不知何故,<td> 边界不起作用,子 charged_amount 属性不知何故被归入第一个 <td> 现有记录修改中。
谢谢!
【问题讨论】:
-
您能否也发布您用于生成此标记的 RoR 代码?
-
能否提供您浏览器提交的原始POST数据?最简单的方法是从浏览器开发者工具的“网络”窗格中获取。
标签: html ruby-on-rails nested-forms nested-attributes named-parameters