Rails number_field 和 Ajax

Rails number_field with Ajax

我有一个表单,其中有多个字段代表一个订单项。我试图确保实时保存对项目数量所做的更改。当通过 link_to 字段完全删除订单项时,我能够执行此操作。我无法对 number_field:

做同样的事情

我的2个字段的代码如下:

<%= 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 起作用了。删除订单项后,该行为是正确的。 但是对于 number_field,我得到了一个错误 wrong number of arguments (given 3, expected 1..2)

我做错了什么?如何让 number_field 与 Ajax 远程工作?

出现错误是因为您将 path 设置为 number_field 方法的参数之一。

文档告诉我们,当我们在表单构建器中使用该方法时,应该只有 2 个参数。

示例:number_field(method, options = {})

Rails API 文档:Link to number_field method

你应该在 data:

中使用这种类型的参数

示例:

<%= order_item_form.number_field :quantity, data: { url: update_quantity_path(...), ... }, ... %>

这消除了错误。

执行此操作的 rails 方法是将这些数据属性添加到您的 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) } %>

查看 Working with Javascript in Rails 指南中的 自定义远程元素 部分以获得进一步的解释,并了解如何在 Ajax 之前禁用输入字段请求 returns.