Rails 4不使用表单方法PATCH,默认为POST

时间:2014-02-06 13:22:56

标签: ruby-on-rails-4

我有以下行生成表单标记;

<%= form_for :stream, url: stream_path(@stream), method: :patch do |f| %>  

它生成以下内容;

<form method="post" action="/streams/52b02d267e3be39d3da5aa609f1049d7" accept-charset="UTF-8">

如果我将其更改为:put,它仍有帖子,但如果我写method: :get更改为get

有没有人知道为什么会这样做以及我可以做些什么来阻止它?

这是rake路线的输出;

    Prefix Verb   URI Pattern                 Controller#Action
    streams GET   /streams(.:format)          streams#index
           POST   /streams(.:format)          streams#create
 new_stream GET   /streams/new(.:format)      streams#new
edit_stream GET   /streams/:id/edit(.:format) streams#edit
     stream GET   /streams/:id(.:format)      streams#show
          PATCH   /streams/:id(.:format)      streams#update
            PUT   /streams/:id(.:format)      streams#update
         DELETE   /streams/:id(.:format)      streams#destroy

背景是这是一个简单的编辑表单,我想要它做的只是他控制器的更新方法。

跟进

在我的布局文件中,我将csrf_meta_tags和我的javascript_include_tag链接引入名为“stream”的文件,其中包含以下内容

//= require jquery
//= require jquery_ujs

2 个答案:

答案 0 :(得分:10)

method: (:get|:post|:patch|:put|:delete)

来自文档:

  选项哈希中的

“。如果动词不是GET或POST,HTML表单本身支持,则表单将设置为POST,名为_method的隐藏输入将携带服务器要解释的预期动词。 “

来源:http://api.rubyonrails.org/classes/ActionView/Helpers/FormHelper.html

答案 1 :(得分:0)

你的application.js中的

//= require jquery_ujs吗?

还要确保

<%= javascript_include_tag "application"%>
<%= csrf_meta_tag %>

出现在您的布局文件中。