Rails 简单形式的 put/patch 请求仅作为某些对象的 post 请求

Ara*_*ind 1 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>
Run Code Online (Sandbox Code Playgroud)

当我通过methodas时: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" />
Run Code Online (Sandbox Code Playgroud)

对于某些对象,代码按预期提交给更新操作,但对于某些对象,代码作为发布请求提交。这是 Rails 中的错误吗?或者我缺少什么?

Tim*_*ing 5

并非所有浏览器都支持putpatch. Rails 用现场解决了这个问题_method。Rails 有一个 Rack 中间件,HTTP POSTHTTP PUT表单发送_method=put. 如果您查看 Rails 控制台,您可以发现您收到了一个put/update请求。