ruby-on-rails - Rails 表单未在控制器参数中正确设置选中的字段_for 行已选中
问题描述
我一直在努力解决这个问题。我有一个表格,我正在fields_for
利用PurchaseOrderLineItem
PurchaseOrder
<%= form_with model: [@quote, @purchase_order], local: true do |form| %>
<% if purchase_order.errors.any? %>
<div id="error_explanation">
<h2><%= pluralize(purchase_order.errors.count, "error") %> prohibited this purchase_order from being saved:</h2>
<ul>
<% purchase_order.errors.full_messages.each do |message| %>
<li><%= message %></li>
<% end %>
</ul>
</div>
<% end %>
<div class="text-center text-xl text-bold">
<%= form.label :number, 'PO Number' %>
<%= form.text_field :number, class: 'text-field-input' %>
</div>
<table>
<tr>
<th class='px-4 py-2'>Include in PO</th>
<th class='px-4 py-2'>Part No.</th>
<th class='px-4 py-2'>Description</th>
<th class='px-4 py-2'>Condition</th>
<th class='px-4 py-2'>Total Quantity Requested</th>
<th class='px-4 py-2'>Quantity Awarded (So Far)</th>
<th class='px-4 py-2'>Quantity To Award</th>
<th class='px-4 py-2'>Quantity Quoted</th>
<th class='px-4 py-2'>Unit Price</th>
<th class='px-4 py-2'>Total Price</th>
</tr>
<% @quote_line_items.each do |line_item| %>
<%= form.fields_for 'purchase_order_line_items[]', line_item do |cf| %>
<%= cf.hidden_field :quote_line_item_id, value: line_item.id %>
<%= cf.hidden_field :id, value: line_item.po_line_item&.id %>
<tr class='border px-4 py-2 h-12' data-line-item-id=<%= line_item.id %>>
<td class='border px-4 py-2'><%= cf.check_box(:being_awarded, {class: 'quote-award-checkbox', checked: !!line_item.po_line_item}) %></td>
<td class='border px-4 py-2'><%= line_item.part.number %></td>
<td class='border px-4 py-2'><%= line_item.part.description %></td>
<td class='border px-4 py-2'>
<%= select_tag(
:part_condition,
options_for_select(part_conditions_for_select_options,
selected: part_conditions_for_select_options[line_item.part_condition]
)
) %>
</td>
<td class='border px-4 py-2'><%= line_item.rfq_line_item.quantity %></td>
<td class='border px-4 py-2'><%= line_item.rfq_line_item.quantity_fulfilled %></td>
<td class='border px-4 py-2'><%=
cf.number_field(
:quantity,
{
value: line_item.po_line_item&.quantity || 0,
min: 0, max: line_item.max_allowed_quantity,
class: 'awarded-quantity-input number-field-input'
})
%></td>
<td class='border px-4 py-2 quantity'><%= line_item.quantity %></td>
<td class='border px-4 py-2'><%=
cf.number_field(
:unit_price,
{
value: line_item.po_line_item&.unit_price || line_item.unit_price,
step: 0.01,
class: 'number-field-input unit-price'
}
)
%></td>
<td class='border px-4 py-2 total-price'><%= line_item.total_price %></td>
</tr>
<% end %>
<% end %>
</table>
<div class="actions text-center m-4">
<%= form.submit 'Submit', class: 'big-btn px-8 py-4' %>
</div>
<% end %>
这里的问题是子表单复选框没有将预期值发送到控制器
该being_awarded
属性主要以“未选中”的形式出现,有时[随机]会将某些being_awarded
复选框标记为“已选中”
being_awarded
被定义attr_accessor
为PurchaseOrderLineItem
解决方案
正是这些小错误让我们最疯狂……
我在子窗体之外启动了循环,从而调用fields_for
了每个line_item
,它只是导致了不稳定的行为
推荐阅读
- javascript - 条件导入 Deno
- python - 两个循环无法将二维列表复制到 python 中的新变量
- python - QStackedWidget换屏时,如何在换屏中调用函数?
- pine-script - 如何访问tradingview hline 值?
- python - Tensorflow 维度问题:ValueError: Shapes (3, 1) and (None, 3) is incompatible
- rest - 无法在 HATEOAS Spring boot 中获取正确的 URL
- opencv - 使用 OpenCV 从条形码图像中检测和消除倾斜
- python - 创建依赖于系统范围安装的 libssl.so 的二进制 python 包
- python - 更改 np.linspace 时数组不得包含 infs 或 NaN
- c# - 打开应用程序时如何启动广告