環境
・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15
はじめに
Railsで初めてWebアプリを作成中、form_withやlink_toを使用するときHTTPメソッドの指定がないのにルーティングが動いていいることに疑問を感じて調べた内容です。
ルーティングとは
URI PatternとHTTPメソッドを受け取り、どのアクションを動かすかを指定する役割があります。
なのでブラウザ側でURI PatternとHTTPメソッドを指定する必要あります。
たとえば
詳細ボタンを押すとあるアクションが動く記述(こちらはPrefix)
<%= link_to '詳細', tweet_path(tweet.id), method: :get %>
とか(こちらはURI Pattern)
<%= link_to '削除', "/tweets/#{tweet.id}", method: :delete %>
みたいにmethod:でHTTPメソッド指定とURI Patternの指定がなされている
[本題]HTTPメソッドの指定がない場合
具体的には以下のような記述
<%= link_to '詳細', tweet_path(tweet.id) %>
上記の例と見比べるとmethod: :get がなくても正常に動きます。
あれ?HTTPメソッド指定ないのに???
初心者の私にとっては指定がないのになぜ動くの?
ルーティングのルールがわからなくなった瞬間でした。。。
結論
HTTPメソッドの指定しない場合、ブラウザ側ではデフォルトでサーバーに対して GET でリクエストを送るということです!
Railsのルーティングなどに関係なくただブラウザの話。
(※コメントにてご指摘いただき修正しました)
なので指定なくともブラウザがURI PatternとHTTPメソッドを送信し、あるアクションが動いたということになります!!
指定されてないのに動くってことに初心者の私にはなかなかわからない感覚でした。
参照
Railsのルーティング
・https://railsguides.jp/routing.html