前提
次のルートが設定されている。
Rails.application.routes.draw do
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'signup' => 'users#new'
resources :users
end
このときrake routesコマンドで得られるルートの一覧は次の通り。
一番左にあるprefixがアクセスしやすくするためにルートにつけた名前。
$ rake routes
Prefix Verb URI Pattern Controller#Action
root GET / static_pages#home
help GET /help(.:format) static_pages#help
signup GET /signup(.:format) users#new
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
_pathと _urlの使い方と使う目的
<Prefix>+_pathと<Prefix>+_url
上記一覧のPrefixと_pathや_urlを組み合わせて使う。
例えばroot_pathやroot_urlといったメソッドを通してURLを参照することが出来る。
root_path => '/' ※ルート以下の文字列を返す
root_url => 'http://www.example.com/' ※完全なURLの文字列を返す
help_path => '/help'
help_url => 'http://www.example.com/help'
_pathと _urlの使い分け
(自分の中でちゃんと整理できていないけど、あとで整理する)
・リダイレクトするときは_urlを使用する。それ以外は_pathを使う。
・ちなみに、testでassert_templateの引数として_pathや_urlを渡してもだめ。ちゃんとusers/newなどで指定してあげないとダメ。
おまけ
redirect_to @user
といった行がありますが、これは次のコードと等価になる。
redirect_to user_url(@user)
これはRailsが、redirect_to @userというコードからuser_url(@user)といったコードを実行したいことを(自動的に)推察してくれた結果になる、とのこと。実際にコードを見たり書いたりして体験して身に付けていこう。
参考
第7章 ユーザー登録 -Ruby on Rails チュートリアル 実例を使ってRailsを学ぼう Michael Hartl (マイケル・ハートル)