ルーティング(routes)

ルーティング定義(routes.rb)

説明

URLとアプリケーションのパラメータを結びつける仕組み

説明

  • 設定ファイルは、「config/routes.rb」
  • 優先順位は、上から順

デフォルトの設定

match ':controller(/:action(/:id(.:format)))'
  • http:// ホスト名:ポート番号/:controller/:action/:id
  • params[:id]でパラメータidの値を取得

RESTfulなURLを自動生成(resources)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

RESTfulなURLを自動生成

使い方

resources :リソース名 [, オプション]

生成されるルート

URLアクションHTTPメソッド説明
/XXXs(.:format)indexGET一覧画面を生成
/XXXs/:id(.:format)showGET詳細画面を生成
/XXXs/new(.:format)newGET登録画面を生成
/XXXs(.:format)createPOST登録処理
/XXXs/:id/edit(.:format)editGET編集画面を生成
/XXXs/:id(.:format)updatePUT更新処理
/XXXs/:id(.:format)destroyDELETE削除処理

生成されるパス

パスURL戻り値
XXXs_pathXXXs_url/XXXs
XXX_path(:id)XXX_url(:id)/XXXs/:id
new_XXX_pathnew_XXX_url/XXXs/new
edit_XXX_path(:id)edit_XXX_url(:id)/XXXs/:id/edit

オプション

オプション説明
:asルート名に利用する別名
:controllerコントローラを指定
:path_names指定したアクションのみ名前の変更
:pathURLを書き換える
:only生成されるURLを絞り込む
:except指定したURLは生成しない
:shallowGenerates shallow routes for nested resource(s). When placed on a parent resource, generates shallow routes for all nested resources.
:shallow_pathPrefixes nested shallow routes with the specified path.
:shallow_prefixPrefixes nested shallow route names with specified prefix.
:formatAllows you to specify the default value for optional format segment or disable it by supplying false.

RESTfulなURLを自動生成
resources :pages
#     pages GET    /pages(.:format)          pages#index
#           POST   /pages(.:format)          pages#create
#  new_page GET    /pages/new(.:format)      pages#new
# edit_page GET    /pages/:id/edit(.:format) pages#edit
#      page GET    /pages/:id(.:format)      pages#show
#           PUT    /pages/:id(.:format)      pages#update
#           DELETE /pages/:id(.:format)      pages#destroy
ルート名に使用する名前をmainにする
resources :pages, :as => :main
# main_index GET    /pages(.:format)          pages#index
#            POST   /pages(.:format)          pages#create
#   new_main GET    /pages/new(.:format)      pages#new
#  edit_main GET    /pages/:id/edit(.:format) pages#edit
#       main GET    /pages/:id(.:format)      pages#show
#            PUT    /pages/:id(.:format)      pages#update
#            DELETE /pages/:id(.:format)      pages#destroy
処理するコントローラを指定
resources :pages, :controller => :mains
#     pages GET    /pages(.:format)          mains#index
#           POST   /pages(.:format)          mains#create
#  new_page GET    /pages/new(.:format)      mains#new
# edit_page GET    /pages/:id/edit(.:format) mains#edit
#      page GET    /pages/:id(.:format)      mains#show
#           PUT    /pages/:id(.:format)      mains#update
#           DELETE /pages/:id(.:format)      mains#destroy
URLを置き換える
resources "pages", :path => 'admin/page'
#     pages GET    /admin/page(.:format)          pages#index
#           POST   /admin/page(.:format)          pages#create
#  new_page GET    /admin/page/new(.:format)      pages#new
# edit_page GET    /admin/page/:id/edit(.:format) pages#edit
#      page GET    /admin/page/:id(.:format)      pages#show
#           PUT    /admin/page/:id(.:format)      pages#update
#           DELETE /admin/page/:id(.:format)      pages#destroy
作成されるURLを絞り込む
resources :pages, :only => [:index]
# pages GET /pages(.:format) pages#index
作成しないURLを指定
resources :pages, :except => [:index, :show]
#     pages POST   /pages(.:format)          pages#create
#  new_page GET    /pages/new(.:format)      pages#new
# edit_page GET    /pages/:id/edit(.:format) pages#edit
#      page PUT    /pages/:id(.:format)      pages#update
#           DELETE /pages/:id(.:format)      pages#destroy
コントローラにnamespaceを不要
resources :pages, :module => :main
#     pages GET    /pages(.:format)          main/pages#index
#           POST   /pages(.:format)          main/pages#create
#  new_page GET    /pages/new(.:format)      main/pages#new
# edit_page GET    /pages/:id/edit(.:format) main/pages#edit
#      page GET    /pages/:id(.:format)      main/pages#show
#           PUT    /pages/:id(.:format)      main/pages#update
#           DELETE /pages/:id(.:format)      main/pages#destroy
制限を付ける
resources :users, :constraints => {:title => /[a-z]{1,15}/}
#     users GET    /users(.:format)          users#index {:title=>/[a-z]{1,15}/}
#           POST   /users(.:format)          users#create {:title=>/[a-z]{1,15}/}
#  new_user GET    /users/new(.:format)      users#new {:title=>/[a-z]{1,15}/}
# edit_user GET    /users/:id/edit(.:format) users#edit {:title=>/[a-z]{1,15}/}
#      user GET    /users/:id(.:format)      users#show {:title=>/[a-z]{1,15}/}
#           PUT    /users/:id(.:format)      users#update {:title=>/[a-z]{1,15}/}
#           DELETE /users/:id(.:format)      users#destroy {:title=>/[a-z]{1,15}/}

ソースコード

ソースコード検索

単一のリソースを定義(resource)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

RESTfulなURLを自動生成

使い方

resource(リソース名 [, オプション])

生成されるルート

URLアクションHTTPメソッド説明
/XXX(.:format)showGET詳細画面を生成
/XXX/new(.:format)newGET登録画面を生成
/XXX(.:format)createPOST登録処理
/XXX/edit(.:format)editGET編集画面を生成
/XXX(.:format)updatePUT更新処理
/XXX(.:format)destroyDELETE削除処理

生成されるパス

パスURL戻り値
XXX_pathXXX_url/XXX
new_XXX_pathnew_XXX_url/XXX/new
edit_XXX_pathedit_XXX_url/XXX/edit

オプション

オプション説明
:asルート名に利用する別名
:controllerコントローラを指定
:pathURLを書き換える
:only生成されるURLを絞り込む
:except指定したURLは生成しない
:modulenamespaceを付与
:constraints制限を付ける

単一のリソースを定義
resource :page
#      page POST   /page(.:format)      pages#create
#  new_page GET    /page/new(.:format)  pages#new
# edit_page GET    /page/edit(.:format) pages#edit
#           GET    /page(.:format)      pages#show
#           PUT    /page(.:format)      pages#update
#           DELETE /page(.:format)      pages#destroy
ルート名に使用する名前
resource :page, :as => :main
#      main POST   /page(.:format)      pages#create
#  new_main GET    /page/new(.:format)  pages#new
# edit_main GET    /page/edit(.:format) pages#edit
#           GET    /page(.:format)      pages#show
#           PUT    /page(.:format)      pages#update
#           DELETE /page(.:format)      pages#destroy
処理するコントローラを指定
resource :page, :controller => :main
#      page POST   /page(.:format)      main#create
#  new_page GET    /page/new(.:format)  main#new
# edit_page GET    /page/edit(.:format) main#edit
#           GET    /page(.:format)      main#show
#           PUT    /page(.:format)      main#update
#           DELETE /page(.:format)      main#destroy
URLを置き換える
resource :page, :path => 'admin/page'
#      page POST   /admin/page(.:format)      pages#create
#  new_page GET    /admin/page/new(.:format)  pages#new
# edit_page GET    /admin/page/edit(.:format) pages#edit
#           GET    /admin/page(.:format)      pages#show
#           PUT    /admin/page(.:format)      pages#update
#           DELETE /admin/page(.:format)      pages#destroy
作成されるURLを絞り込む
resource :page, :only => [:show]
# page GET /page(.:format) pages#show
作成しないURLを指定
resource :page, :except => [:create, :new]
# edit_page GET    /page/edit(.:format) pages#edit
#      page GET    /page(.:format)      pages#show
#           PUT    /page(.:format)      pages#update
#           DELETE /page(.:format)      pages#destroy
コントローラにnamespaceを不要
resource :page, :module => :admin
#      page POST   /page(.:format)      admin/pages#create
#  new_page GET    /page/new(.:format)  admin/pages#new
# edit_page GET    /page/edit(.:format) admin/pages#edit
#           GET    /page(.:format)      admin/pages#show
#           PUT    /page(.:format)      admin/pages#update
#           DELETE /page(.:format)      admin/pages#destroy

ソースコード

ソースコード検索

ルートを定義(match)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

アクセス可能なURLを指定することで、HTMLリクエストを処理

使い方

match(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

ルートを定義
match 'pages/show'
# pages_show  /pages/show(.:format) pages#show
コントローラとアクションを指定
match "pages", :controller => :pages, :action => :show
# pages  /pages(.:format) pages#show
コントローラとアクションをtoを使った短縮形で指定
match "pages", :to => 'pages#show'
# pages  /pages(.:format) pages#show
HTTPメソッドを指定
match "pages/show", :via => :get
# pages_show GET /pages/show(.:format) pages#show
ルート名を指定
match "pages/show", :as => 'main'
# main  /pages/show(.:format) pages#show

ソースコード

ルートのURLを指定(root)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

ルート(/)のURLを指定

使い方

root([オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

注意点

  • /public/以下のファイルが優先して認識するため、デフォルトで置いてあるindex.htmlは削除してください

pagesコントローラとindexアクションをrootに指定
root :controller => 'pages', :action => 'index'
# root  / pages#index
コントローラとアクションをtoを使った省略形で記述
root :to => 'pages#index'
# root  / pages#index

ソースコード

ソースコード検索

URLにnamespaceを付与(scope)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

URLにnamespaceを付与

使い方

scope モジュール名 [, オプション] do
  ルート定義
end

オプション

オプション説明
:pathルートのパスを指定
:modulenamespaceを指定
必ずセットで指定
:asルート名を指定

URLにnamespaceを付与
scope :admin do
  resources :pages
end
#     pages GET    /pages(.:format)          pages#index
#           POST   /pages(.:format)          pages#create
#  new_page GET    /pages/new(.:format)      pages#new
# edit_page GET    /pages/:id/edit(.:format) pages#edit
#      page GET    /pages/:id(.:format)      pages#show
#           PUT    /pages/:id(.:format)      pages#update
#           DELETE /pages/:id(.:format)      pages#destroy
controller の namespace を指定
scope :admin, :module => :main do
  resources :pages
end
#     pages GET    /pages(.:format)          main/pages#index
#           POST   /pages(.:format)          main/pages#create
#  new_page GET    /pages/new(.:format)      main/pages#new
# edit_page GET    /pages/:id/edit(.:format) main/pages#edit
#      page GET    /pages/:id(.:format)      main/pages#show
#           PUT    /pages/:id(.:format)      main/pages#update
#           DELETE /pages/:id(.:format)      main/pages#destroy
ルート名を指定
scope :admin, :as => :main do
  resources :pages
end
#     main_pages GET    /pages(.:format)          pages#index
#                POST   /pages(.:format)          pages#create
#  new_main_page GET    /pages/new(.:format)      pages#new
# edit_main_page GET    /pages/:id/edit(.:format) pages#edit
#      main_page GET    /pages/:id(.:format)      pages#show
#                PUT    /pages/:id(.:format)      pages#update
#                DELETE /pages/:id(.:format)      pages#destroy}

ソースコード

ソースコード検索

名前空間を付与(namespace)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

特徴

  • 名前空間を付与

使い方

namespace モジュール名 [, オプション] do
  ルート定義
end

オプション

オプション説明
:pathルートのパスを指定
:modulenamespaceを指定
:asルート名を指定
:shallow_path

userにadminの名前空間を付与
namespace :admin do
  resources :user
end
# admin_user_index GET    /admin/user(.:format)          admin/user#index
#                  POST   /admin/user(.:format)          admin/user#create
#   new_admin_user GET    /admin/user/new(.:format)      admin/user#new
#  edit_admin_user GET    /admin/user/:id/edit(.:format) admin/user#edit
#       admin_user GET    /admin/user/:id(.:format)      admin/user#show
#                  PUT    /admin/user/:id(.:format)      admin/user#update
#                  DELETE /admin/user/:id(.:format)      admin/user#destroy
sekretと言う名のpathを指定
namespace :admin, :path => "sekret" do
  resources :user
end
# admin_user_index GET    /sekret/user(.:format)          admin/user#index
#                  POST   /sekret/user(.:format)          admin/user#create
#   new_admin_user GET    /sekret/user/new(.:format)      admin/user#new
#  edit_admin_user GET    /sekret/user/:id/edit(.:format) admin/user#edit
#       admin_user GET    /sekret/user/:id(.:format)      admin/user#show
#                  PUT    /sekret/user/:id(.:format)      admin/user#update
#                  DELETE /sekret/user/:id(.:format)      admin/user#destroy
sekretと言う名のモジュールを指定
namespace :admin, :module => "sekret" do
  resources :user
end
# admin_user_index GET    /admin/user(.:format)          sekret/user#index
#                  POST   /admin/user(.:format)          sekret/user#create
#   new_admin_user GET    /admin/user/new(.:format)      sekret/user#new
#  edit_admin_user GET    /admin/user/:id/edit(.:format) sekret/user#edit
#       admin_user GET    /admin/user/:id(.:format)      sekret/user#show
#                  PUT    /admin/user/:id(.:format)      sekret/user#update
#                  DELETE /admin/user/:id(.:format)      sekret/user#destroy
sekretと言う名のルート名を指定
namespace :admin, :as => "sekret" do
  resources :user
end
# sekret_user_index GET    /admin/user(.:format)          admin/user#index
#                   POST   /admin/user(.:format)          admin/user#create
#   new_sekret_user GET    /admin/user/new(.:format)      admin/user#new
#  edit_sekret_user GET    /admin/user/:id/edit(.:format) admin/user#edit
#       sekret_user GET    /admin/user/:id(.:format)      admin/user#show
#                   PUT    /admin/user/:id(.:format)      admin/user#update
#                   DELETE /admin/user/:id(.:format)      admin/user#destroy

ソースコード

ソースコード検索

ルーティングの内容を確認

説明

設定されているルーティングの内容を確認

使い方

$ rake routes

ルーティングの内容を確認
$ rake routes
  Prefix Verb   URI Pattern               Controller#Action
   xxxes GET    /xxxes(.:format)          xxxes#index
         POST   /xxxes(.:format)          xxxes#create
 new_xxx GET    /xxxes/new(.:format)      xxxes#new
edit_xxx GET    /xxxes/:id/edit(.:format) xxxes#edit
     xxx GET    /xxxes/:id(.:format)      xxxes#show
         PATCH  /xxxes/:id(.:format)      xxxes#update
         PUT    /xxxes/:id(.:format)      xxxes#update
         DELETE /xxxes/:id(.:format)      xxxes#destroy

GETリクエスト(get)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

GETリクエスト

使い方

get(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

get 'bacon', to: 'food#bacon'

ソースコード

ソースコード検索

POSTリクエスト(post)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

POSTリクエスト

使い方

post(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

post 'bacon', to: 'food#bacon'

ソースコード

ソースコード検索

PATCHリクエスト(patch)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

PATCHリクエスト

使い方

patch(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

patch 'bacon', to: 'food#bacon'

ソースコード

ソースコード検索

PUTリクエスト(put)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

PUTリクエスト

使い方

put(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

put 'bacon', to: 'food#bacon'

ソースコード

ソースコード検索

DELETEリクエスト(delete)

適応バージョン

  • 1.0.0
  • 1.1.0
  • 1.1.1
  • 1.1.6
  • 1.2.0
  • 1.2.6
  • 2.0.0
  • 2.0.1
  • 2.0.3
  • 2.1.0
  • 2.2.1
  • 2.3.2
  • 2.3.8
  • 3.0.0
  • 3.0.5
  • 3.0.7
  • 3.0.9
  • 3.1.0
  • 3.2.3
  • 3.2.8
  • 3.2.13
  • 4.0.0
  • 4.1.0
  • 4.2.1

説明

DELETEリクエスト

使い方

delete(URLパターン [, オプション])

オプション

オプション説明
:controller, :actionコントローラとアクションを指定
必ずセットで指定
:to:controller, :actionの短縮形
#でコントローラとアクションを区切る
:viaHTTPメソッドを指定
:asルート名を指定

delete 'broccoli', to: 'food#broccoli'

ソースコード

ソースコード検索