LoginSignup
2
1

More than 3 years have passed since last update.

HTTPメソッドの指定がない場合はブラウザ側はGETでリクエスト

Last updated at Posted at 2020-08-28

環境

・Rails 6.0.3.2
・mysql Ver 14.14 Distrib 5.6.47
・osx10.15

はじめに

Railsで初めてWebアプリを作成中、form_withlink_toを使用するときHTTPメソッドの指定がないのにルーティングが動いていいることに疑問を感じて調べた内容です。

ルーティングとは

URI PatternHTTPメソッドを受け取り、どのアクションを動かすかを指定する役割があります。
なのでブラウザ側でURI PatternHTTPメソッドを指定する必要あります。

たとえば

詳細ボタンを押すとあるアクションが動く記述(こちらは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 PatternHTTPメソッドを送信し、あるアクションが動いたということになります!!

指定されてないのに動くってことに初心者の私にはなかなかわからない感覚でした。

参照

Railsのルーティング
https://railsguides.jp/routing.html

2
1
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
2
1