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="✓" />
<input type="hidden" name="_method" value="put" />
对于某些对象,代码正在提交给更新操作,但是对于某些它作为发布请求发送。这是一个轨道错误?还是有什么我失踪?
答
并非所有浏览器都支持put
或patch
。 Rails通过_method
字段解决了这个问题。 Rails有一个机架中间件,当表格发送_method=put
时,它将HTTP POST
重写为HTTP PUT
。如果你看看你的Rails控制台,你可以得到put
/update
请求。
对于创建动作通常是“发布”请求,但是“更新”动作需要“放” –
是@AlexKojin,但这是一个更新而不是创建。 – Aravind