我有一个默认情况下为POST
的表格。在更改下拉列表时,我想将form方法更改为PATCH
并将其操作更改为其他内容,然后提交表单。
erb:
<%= form_for @booking, :url => admin_events_bookings_path, :html => { :class => 'smart-form', :id => 'mainForm', :data => { :change_event_path => change_event_admin_events_bookings_path } } do |f| %>
...
<% end %>
HTML(呈现):
<form class="smart-form" id="mainForm" data-change-event-path="/admin/events/bookings/change_event" action="/admin/events/bookings" accept-charset="UTF-8" method="post" novalidate="novalidate"><input name="utf8" type="hidden" value="✓"><input type="hidden" name="authenticity_token" value="oC9bO0GVnMuc4UFnJLKDbTvaWEPLCKycmrsTJGWcHyYZ2QrYsVzbvP1pmMmqF/LIT3BepGCTWhZ0YZyPGsJUPg==">
...
</form>
JS:
$('#booking_event_id').on('change', function(ev) {
$('#mainForm').attr('action', $('#mainForm').data().changeEventPath) //this works, verified in browser
$('#mainForm').attr('method', 'patch') //this works, verified in browser
$('#mainForm')[0].submit()
})
但是,到达服务器的请求是GET请求。从日志中:
Started GET "/admin/events/bookings/change_event?utf8=%E2%9C%93&authenticity_token=oizowirdfSiR%2BiUGIsZWe8PHSypUAItFK8Y39gwNtK4b2rkh2hQ6X%2FBy%2FKisYyfet21Nzf%2Bbfc%2FFHLhdc1P%2Ftg%3D%3D&ticket_type=priced&booking%5Bevent_id%5D=2"
为什么表单作为GET请求提交?我该如何工作?
答案 0 :(得分:1)
根据Rails docs:
如果该动词不是HTML表单本身支持的GET或POST,则该表单将被设置为POST,并且一个名为_method的隐藏输入将携带服务器想要解释的动词。
因此,要更改动词,只需要将隐藏字段添加到名为 _method 的表单中,其值将为 patch 或 put :
<input type="hidden" name="_method" value="patch">