2016-11-30 37 views
0

我們的形式是這樣的: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

回答

4

並非所有瀏覽器都支持putpatch。 Rails通過_method字段解決了這個問題。 Rails有一個機架中間件,當表格發送_method=put時,它將HTTP POST重寫爲HTTP PUT。如果你看看你的Rails控制檯,你可以得到put/update請求。