LoginSignup
162
128

More than 5 years have passed since last update.

_pathメソッドと_urlメソッドの使い分け

Last updated at Posted at 2016-01-12

前提

次のルートが設定されている。

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_pathroot_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 (マイケル・ハートル)

162
128
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
162
128