前提
次のルートが設定されている。
routes.rb
Rails.application.routes.draw do
root 'static_pages#home'
get 'help' => 'static_pages#help'
get 'signup' => 'users#new'
resources :users
end
このときrake routes
コマンドで得られるルートの一覧は次の通り。
一番左にあるprefix
がアクセスしやすくするためにルートにつけた名前。
command
$ 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 (マイケル・ハートル)