Rails :method=>:patch 不起作用

Joe*_*ace 6 ruby-on-rails

所以,我有这个表格声明:

<%= form_for 'students_list', {:url => update_students_list_stream_url(@stream), :method=>:patch}  do |students_list_form| %>
Run Code Online (Sandbox Code Playgroud)

正如 API 文档中所述,但这会导致我出错:

No route matches [POST] "/streams/26/edit-students-list"
Run Code Online (Sandbox Code Playgroud)

所以它仍然尝试发布,即使我的 HTML 输入有:

<input type="hidden" name="_method" value="patch" />
Run Code Online (Sandbox Code Playgroud)

来自 Rails 指南:

Rails 通过使用名为“_method”的隐藏输入来模拟 POST 上的其他方法来解决此问题,该输入被设置为反映所需的方法:

我很困惑

Loa*_*ron 5

我正在寻找关于为什么 Rails 将方法补丁加载为渲染形式的帖子的答案。如果您像我一样最终在这里寻找答案,这就是您正在寻找的答案:

/sf/answers/3268965871/

来自https://guides.rubyonrails.org/form_helpers.html#how-do-forms-with-patch-put-or-delete-methods-work-questionmark

在此输入图像描述


Ric*_*eck 1

你这样做会更好:

<%= form_for @stream do |student_form_list| %>
Run Code Online (Sandbox Code Playgroud)

resources如果您使用标准指令设置了路线,您将拥有以下路线:

在此输入图像描述

在这些路线中,update路径应该students_list_stream_path-而不是update_students_list_stream_path现在拥有的路径。

如果您已设置form_for来使用正确的对象,它将自动设置 的路径和方法update

  • 我发现,如果您的表单构建器有任何隐藏字段,则 :method 声明由于某种原因不起作用(除了 post 和 get)。当我删除“students_list_form.hidden_​​field”时,它开始工作并发送 PATCH 请求。不确定这是否是 Rails 的错误,或者如果我需要隐藏字段该怎么办。 (2认同)