我有一个有多个字段的表单,代表一个订单项目。我试图确保对项目数量的更改能够实时保存。当订单项目通过link_to字段被完全删除时,我能够做到这一点。但对于数字字段,我无法做到同样的效果。
我为这两个字段编写的代码如下:
<%= order_item_form.number_field :quantity, update_quantity_path(:order_item_id => order_item.id, :quantity => order_item.quantity), remote: true, method: :patch, class: "form-control", min: 0 %>
<%= link_to 'Remove', update_quantity_path(:order_item_id => order_item.id, :quantity => 0), remote: true, method: :patch, class: "remove_fields" %>
所以在上面,link_to是有效的。当订单项被删除时,行为是正确的。但是对于数字字段,我得到了一个错误信息 wrong number of arguments (given 3, expected 1..2)
我到底做错了什么?我如何通过Ajax使number_field远程工作?
要做到这一点的方法是将这些数据属性添加到你的应用程序中。number_field
:
<%= order_item_form.number_field :quantity, class: "form-control", min: 0, data: { remote: true, method: :patch, url: update_quantity_path(order_item_id: order_item.id, quantity: 0) } %>
请看一下 自定义远程元素 中段 在Rails中使用Javascript 指南以获得进一步的解释,并学习如何禁用输入字段,直到Ajax请求返回。
该错误的出现是因为你在设置一个 path
作为参数之一的 number_field
方法。
文档告诉我们,当我们在表单构建器中使用该方法时,应该只有两个参数。
例子。number_field(method, options = {})
Rails API Doc: Number_field方法的链接
你应该在 data:
例子。
<%= order_item_form.number_field :quantity, data: { url: update_quantity_path(...), ... }, ... %>
这就消除了错误。