所以,我有这个表格声明:
<%= form_for 'students_list', {:url => update_students_list_stream_url(@stream), :method=>:patch} do |students_list_form| %>
正如API文档中所述,但这导致我出错:
No route matches [POST] "/streams/26/edit-students-list"
即使我的HTML输入有:
,它仍会尝试发布<input type="hidden" name="_method" value="patch" />
来自Rails指南:
Rails通过在POST上模拟其他方法来解决此问题 带有名为“_method”的隐藏输入,设置为反映 期望的方法:
我很困惑
答案 0 :(得分:1)
你会做得更好:
<%= form_for @stream do |student_form_list| %>
如果您使用标准resources
directive设置路线,则可以使用以下路线:
在这些路线中,update
路径应该只是students_list_stream_path
- 而不是您现在拥有的update_students_list_stream_path
。
如果您设置form_for
以使用正确的对象,则会自动设置路径&amp; update
的方法。
答案 1 :(得分:1)
我一直在寻找有关Rails为什么在呈现的表单中将方法补丁作为帖子加载的答案。 如果您最终像我一样在这里寻找,这就是您要寻找的答案:
答案 2 :(得分:0)
Rails使用Rack::MethodOverride
中间件,该中间件将HTTP方法PUT / PATCH调整为POST以支持旧版浏览器。
这可能在Rails API应用程序上发生,以卸载中间件以提高性能。在某些情况下,您想使用视图中的form_with
标签调用临时PUT / PATCH请求,只需添加
# config/application.rb
config.middleware.insert_after Rack::Runtime, Rack::MethodOverride