LoginSignup
1
1

More than 1 year has passed since last update.

Ruby on Rails の link_toで使うnew_user_path の謎を解決します。

Last updated at Posted at 2021-08-03

まずは答えから

rails routes

をした時に表示されるルーティングのPrifixに「_path」を付けたものです。「rails routes」コマンドで確認することができます。

[--- 例 ---]
Prefix                 Verb       URI Pattern                   Controller#Action
new_user_session       GET        /users/sign_in(.:format)      devise/sessions#new

この場合は「new_user_session_path」と指定した時のリンク先は「http://xxxxx.com/users/sign_in」になります。

もう少し詳しく解説

Ruby on Railsのビューでよく使われるlink_toメソッドのリンク先の指定でよく使われる「new_user_path」ですが、初めて見た時はこれが何を意味しているのか全く分かりませんでした。

link_to  "ログイン",  new_user_session_path

例えばこんな感じで使います。
こうすることでログインという文字に対してリンクが付きます。クリック時の移動先はnew_user_session_pathなになりますが、このnew_user_session_pathがどこを表しているのか不明です。

link_to自体は、名前を見るとリンクを付けるメソッドということは分かるのですが、なぜnew_user_session_pathを指定すると違うページへリンクされるのかが分かりません。

rails routes で答えが分かる

最大の疑問はnew_user_session_pathがどこから出てきたのかとうことですが、これは

rails routes

このコマンドを実行すると分かります。
実行するとルーティング一覧が表示されます。

Prefix                 Verb       URI Pattern                   Controller#Action
new_user_session       GET        /users/sign_in(.:format)      devise/sessions#new
user_session           POST       /users/sign_in(.:format)      devise/sessions#create

最初の行は列の説明です。2行目の
Prefixを見てください。このPrifixに「_path」を付けたものが「new_user_session_path」の正体です。

new_user_session       GET        /users/sign_in(.:format)      devise/sessions#new

この行の場合、「new_user_session_path」と指定するとURI_Patternで指定された「users/sign_in」というURLに飛びます。
「http://localhost:3000」がルートURLの場合、リンク先は「http://localhost:3000/users/sign_in」になるということです。
(.:format)は拡張子を表すシンボルです。ここでは説明は省略しますが無視しておいて大丈夫です。

どんなアクションが実行されるのかも分かる。

このprefixを見ると、どんなアクションが実行されるのかも分かります。
「new_user_session_path」を指定した場合、「devise/sessions#new」をいうアクションが実行されます。
そのため、対応するコントローラーのnewアクションを編集すればよいということになります。

最初は分かりにくいけど、分かるとかなり便利

この「xxxx_path」という書き方は分かるとかなり便利です。最初は戸惑うこともありますけど、たくさん使って慣れてしまいましょう!
この書き方に慣れてくると

rails routes

がかなり大事だと分かります…

1
1
0

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