Rails:method =>:补丁不起作用

时间:2015-12-12 23:52:32

标签: ruby-on-rails

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

<%= 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”的隐藏输入,设置为反映   期望的方法:

我很困惑

3 个答案:

答案 0 :(得分:1)

你会做得更好:

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

如果您使用标准resources directive设置路线,则可以使用以下路线:

enter image description here

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

如果您设置form_for以使用正确的对象,则会自动设置路径&amp; update的方法。

答案 1 :(得分:1)

我一直在寻找有关Rails为什么在呈现的表单中将方法补丁作为帖子加载的答案。 如果您最终像我一样在这里寻找,这就是您要寻找的答案:

https://stackoverflow.com/a/46699512/5750078

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

enter image description here

答案 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