Ruby
Rails

【Rails勉強ネタ】 destroyアクションもPOSTメソッドを送信してる??

前回updateアクションの時、送信されているhtmlリクエストがPOSTだったのを確認したので、

destroyアクションではどうなのか確認してみた。


実際に確認

Noticeというモデルがあるとする。

indexページから

button_toで削除する場合と

link_toで削除する

パターンを見たいので以下のような見た目になった

↓(左が削除ボタン、右が削除リンク)

スクリーンショット 2019-04-14 1.31.48.png


view テンプレート


index.html.erb



<% @notices.each do |notice| %>
<tr>
  〜〜〜略〜〜〜
<td><%= button_to "削除", notice_path(notice),
class: 'btn',
method: :delete %>
</td>
<td>
<%= link_to "削除", notice_path(notice), method: :delete %>
</td>
</tr>
<% end %>




HTML

右クリック→ページのソースを表示で見てみると。

①削除ボタン

<td><form class="button_to" method="post" action="/notices/14">
<input type="hidden" name="_method" value="delete" /><input class="btn" type="submit" value="削除" /><input type="hidden" name="authenticity_token" value="bvoKobmo3Zvj6jysAJAmuxv49+WX+EqiG+bBSqWibDm9+lc44shUlU3mAau9H6WGR5z7rucUmICmobTOplLT0w==" /></form>
</td>

②削除リンク

<td>
<a rel="nofollow" data-method="delete" href="/notices/14">削除</a>
</td>

①削除ボタンはupdateの時と同様、mothod="post"であるが、_methodパラメータでdeleteを指定している。

②削除リンクは data-method="delete"という属性だけ付与されている。


Wiresharkでキャプチャー

リアルなhttpパケットを見てみます。


①削除ボタン

スクリーンショット 2019-04-14 1.58.58.png

こちらもupdateの時と同様、実際に送信しているhttpリクエストはPOSTメソッドだが、Form item: "_method" = "delete"となっている。


②削除リンク

スクリーンショット 2019-04-14 2.06.12.png

こちらも①のパターンと全く同じように見える。

つまりdata-method="delete"属性だけで_methodパラメーターが使えるようである。


疑問に思ったこと

最終的なhttpリクエストの振る舞いが同じになるのであれば、①もdata-method="delete"属性だけにすれば良いのではないのか?