LoginSignup
3
2

More than 5 years have passed since last update.

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

Last updated at Posted at 2019-04-13

前回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"属性だけにすれば良いのではないのか?

3
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2