Railsのレールに乗っかると、methodがget/post以外のものも出てくるけど巷でget/post以外のリクエスト見たこと無いよなぁって疑問

  • 10
    Like
  • 1
    Comment
More than 1 year has passed since last update.

Railsのレールに乗っかると、methodがget/post以外のものも出てくるけど巷でget/post以外のリクエスト見たこと無いよなぁって疑問

タイトルが長い!!!
Rails初心者の僕ですが、とても気になってたことがありました
というのも、世の中のWebアプリ系のフロントでdeleteとかputのメソッドを見たことがなかったのですが、routes.rbで自動生成されるdestoryとかってdeleteとかじゃないですか
趣味はネットワークを流れるリクエストを眺める事な僕ですが、rails使っているであろうWebサービスは数あれど、deleteとかが流れるのを見たことがなかったのです

で?

結論から言うと、routes.rbでDELETEのやつもRailsのlink_toとかで生成するとpostで飛んでます

え?

例えば、link_toで

<%= link_to "ほげほげ", hoge_path(p: p1), method: :delete %>

みたいなことすると、出力されるURLは

<a rel="nofollow" data-method="delete" href="/url/to/hoge?p=p1">ほげほげ</a>

になって(もうaタグで送る時点でファーーーって感じ)
どうもAjaxで送られてるっぽい
流れるリクエストは
Request Method: POST
_method: delete
👆👆👆👆👆👆👆👆👆👆👆👆👆

つまり

Railsではroutes.rbでDELETEとか書いてあるやつでも、POSTで_method=deleteとかで投げればdeleteで解釈してくれる

なんでそうするの?

答えはいつも、ネットの中にある
http://jxck.hatenablog.com/entry/why-form-dosent-support-put-delete
どうもw3cのHTMLの仕様でformのmethod属性は、GETとPOSTしか定義されていないのです

なるほど〜

なるほど〜〜〜〜〜〜〜〜