まずは答えから
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
がかなり大事だと分かります…