Rails用DELETE method提交表单讲解

Sometimes we need to submit form using methods other than ‘post’, in this example, it’s ‘delete’.

For example, I wanted to delete a user when a form is submitted with the user name and ‘delete’ method.

1. I created the route like this:

delete ‘test url’, to: ‘users#destroy’

So I will handle the delete function in 'users' controller, 'destroy' action.


2.1 The view code:

<%= form_tag(‘test url’, method: :delete) do %>
  <%= label_tag ‘Please enter the username that you want to delete:’ %>
  <%= text_field_tag :name %>
  <%= submit_tag ‘Send delete request’ %>
<% end %>

2.2 This view code generates the following html code:

<form action=”test url” accept-charset=”UTF-8″ method=”post”>
  <input name=”utf8″ type=”hidden” value=”✓” />
  <input type=”hidden” name=”_method” value=”delete” />
  <input type=”hidden” name=”authenticity_token” value=”5Rj1osaYdsOkH94pyig99l5Ud64U1H25LCuK33plQuf2Lg+a/+Ub6VVlYBSOvDotOIrX3SCKB6mYsfZTyPkI+Q==” />
  <label for=”Please_enter_the_username_that_you_want_to_delete:”>Please enter the username that you want to delete:</label>
  <input type=”text” name=”name” id=”name” />
  <input type=”submit” name=”commit” value=”Send delete request” />
</form>


As you can see above, the form method is still ‘post’. I was really confused at this point, since the method didn’t turn out to be the ‘delete’ method I expected.

But actually rails generated a hidden input called _method that is supposed to carry the intended verb for the server to interpret. In this case, it’s ‘delete’, exactly what I need.


3. Now let’s see the view, it looks like this:


I typed ‘test user name’ and hit ‘Send delete request’ button, it sent out this http request:


The request method is ‘Post’, with form data ‘_method’ set as ‘delete’ which sent my request to 'users' controller, 'destroy' action. 

Mission complete!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值