Ruby on rails Rails:method=>;:补丁不';行不通

Ruby on rails Rails:method=>;:补丁不';行不通,ruby-on-rails,Ruby On Rails,因此,我有以下声明: <%= form_for 'students_list', {:url => update_students_list_stream_url(@stream), :method=>:patch} do |students_list_form| %> 因此,即使我的HTML输入有: <input type="hidden" name="_method" value="patch" /> 从导轨: Rails通过在POST上模拟其他

因此,我有以下声明:

<%= form_for 'students_list', {:url => update_students_list_stream_url(@stream), :method=>:patch}  do |students_list_form| %>
因此,即使我的HTML输入有:

<input type="hidden" name="_method" value="patch" />

从导轨:

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


我很困惑

你最好这样做:

<%= form_for @stream do |student_form_list| %>


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

在这些路由中,
update
路径应该只是
students\u list\u stream\u path
——而不是您现在拥有的
update\u students\u list\u stream\u path


如果您为设置了
表单以使用正确的对象,它将自动设置
更新
的路径和方法

我一直在寻找一个关于rails为什么在呈现表单中将方法补丁加载为post的答案。 如果你最终像我一样在这里寻找,这就是你想要的答案:

发件人:


Rails使用
Rack::MethodOverride
中间件,调整HTTP方法PUT/PATCH以支持旧浏览器

这可能发生在Rails API应用程序上,以卸载中间件以提高性能。在某些情况下,如果您想使用视图中带有
标记的
form_调用临时PUT/PATCH请求,只需添加

# config/application.rb

config.middleware.insert_after Rack::Runtime, Rack::MethodOverride

如果我没弄错的话,您正在尝试对学生列表流进行更新,对吗?Rails使用在将请求传递到路由之前进行处理的
Rack::MethodOverride
应该使用
\u方法
参数,我对它为什么不工作也有点困惑。我建议尝试使用cURL或Postman发送请求以进行故障排除,因为您正在消除任何与浏览器相关的错误或与表单相关的任何内容。请注意,Rails不可信的javascript驱动程序也会在发送本机补丁/放置/删除请求时使用一些技巧,这也可能是问题的一部分。我发现,这就是:如果表单生成器有任何隐藏字段,由于某种原因,方法声明不起作用(post和get除外)。当我删除
学生列表\表单.隐藏\字段
时,它开始工作并发送补丁请求。不确定这是否是Rails的bug,或者如果我需要隐藏字段,该怎么办。
# config/application.rb

config.middleware.insert_after Rack::Runtime, Rack::MethodOverride