在我看来,使用Slim:
= form_with url: update_pn_price_path(@price)
.form-group
= label_tag :part_number
= text_field_tag :part_number, @price.part_number, required: true
.form-group
=> submit_tag t(:save), class: 'btn btn-primary btn-sm'
= link_to 'Cancel', '', class: 'btn btn-link btn-sm', data: { cancel_in_place: true }
这始终使用标准提交而不是远程提交。日志显示:
Processing by PricesController#update_pn as HTML
我在做什么错?为什么不使用JS提交?
答案 0 :(得分:5)
我很惊讶地看到您的观点被编译了。我可以发现一些问题。
您开始缩进内容,就好像它是形式一样。但是,您没有打开表单标签或没有为 form_with 方法提供块。
= form_with url: update_pn_price_path(@price) .form-group
至少应更改为:
= form_with url: update_pn_price_path(@price) do
.form-group
由于将变量提供给块,因此首选方法是将其捕获到变量中(以下代码中的form
)。如果您不打算使用它,则仍应将其捕获在一个带下划线的变量中,以表明它在那里但未被使用(_form
)。
= form_with url: update_pn_price_path(@price) do |form|
.form-group
由于您使用的是表单生成器,因此创建元素的首选方法是通过表单生成器界面。由于您不是通过表单构建器来创建Submit标签的,这可能是另一个原因,即提交不是远程完成的。
我至少会替换:
=> submit_tag t(:save), class: 'btn btn-primary btn-sm'
使用:
= form.submit t('save'), class: 'btn btn-primary btn-sm'
但最好将整个表单更新为使用表单生成器。结果应如下所示:
= form_with model: @price, url: update_pn_price_path(@price) do |form|
.form-group
= form.label :part_number
= form.text_field :part_number, required: true
.form-group
= form.submit t('save'), class: 'btn btn-primary btn-sm'
= link_to 'Cancel', '', class: 'btn btn-link btn-sm', data: {cancel_in_place: true}
有关其他表单生成器方法的更多信息,请参见FormBuilder和FormHelper文档。
答案 1 :(得分:2)
这是解决问题的方法。新秀错误,但在此处发布以防其他人碰到它。
我上面显示的表单在另一个表单内。您可以提交这样的“内部”表格,但不能远程提交。该表单是通过AJAX调用插入的,因此我将其更改为插入到HTML正文的末尾,然后使用CSS进行定位。这使它超出了包含表单的范围,并使事情按预期进行。