Rails简单表单put / patch请求仅作为一些对象的post请求

时间:2016-11-30 08:51:36

标签: ruby-on-rails simple-form ruby-on-rails-5

我们有这样的形式:

<%= simple_form_for(@venue, url: url, method: method) do |f| %>
 <%= render  "shared/errors", object: venue%>
  <div class="row">
    <div class="col-md-12">
      <div class="form-group label-floating">
        <%= f.association :partner, input_html: { class: "form-control", value: partner.try(:id)  }, label_html: { class: 'control-label' } %>
      </div>
    </div>
  </div>
<div class="row">
  <div class="col-md-12">
    <div class="form-group label-floating">
      <%= f.input :name, input_html: { class: "form-control"  }, label_html: { class: 'control-label' } %>
    </div>
  </div>
</div>

<div class="row">
  <div class="col-md-12">
    <div class="form-group label-floating">
      <%= f.input :description, required: true,label: 'About', input_html: { class: "form-control", rows: 5 }, label_html: { class: 'control-label' }  %>
    </div>
  </div>
</div>

当我将method作为:put传递时,我会在表单

中获得一个隐藏字段
<form novalidate="novalidate" class="simple_form edit_venue" id="edit_venue_19" action="/admin/venues/19" accept-charset="UTF-8" method="post"><input name="utf8" type="hidden" value="&#x2713;" />
  <input type="hidden" name="_method" value="put" />

对于某些对象,代码将按预期提交给更新操作,但对于某些对象,它将作为发布请求。这是rails中的错误吗?或者有什么我想念的东西?

1 个答案:

答案 0 :(得分:4)

并非所有浏览器都支持putpatch。 Rails使用_method字段解决了这个问题。 Rails有一个Rack Middleware,当表单发送HTTP POST时,它会将HTTP PUT重写为_method=put。如果您查看Rails控制台,则可以收到put / update请求。