環境
・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