Rails的简单形式的认沽/补丁请求,去为某些对象POST请求单独

问题描述:

我们的形式是这样的:Rails的简单形式的认沽/补丁请求,去为某些对象POST请求单独

<%= 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" /> 

对于某些对象,代码正在提交给更新操作,但是对于某些它作为发布请求发送。这是一个轨道错误?还是有什么我失踪?

+0

对于创建动作通常是“发布”请求,但是“更新”动作需要“放” –

+0

是@AlexKojin,但这是一个更新而不是创建。 – Aravind

并非所有浏览器都支持putpatch。 Rails通过_method字段解决了这个问题。 Rails有一个机架中间件,当表格发送_method=put时,它将HTTP POST重写为HTTP PUT。如果你看看你的Rails控制台,你可以得到put/update请求。