はじめに
ルーティングが無いとアプリケーションは動かないですよね。それくらい重要な要素ですが、意外と知られていない機能があるのです。それを使いこなすことで、より便利で分かりやすいルーティングを定義できると思うので、小技を習得していってください!
小技集
リソースフルなルーティングを一括定義する
resources :テーブル名
のような定義方法をすることで、リソースフルなルーティングを一括定義することが可能です。
resources :users
※定義されたルーティングは以下の通りです。
HTTP動詞 | パス | コントローラ#アクション |
---|---|---|
GET | /users | users#index |
GET | /users/new | users#new |
POST | /users | users#create |
GET | /users/:id | users#show |
GET | /users/:id/edit | users#edit |
PATCH | /users/:id | users#update |
DELETE | /users/:id | users#destroy |
単数形リソースの定義
idを必要としない(1つしかない)リソースには単数形リソースで定義することができます。
※単数形リソースは複数形のコントローラに割り当てられます。
resource :user
名前空間を利用して用途を明確化する
コントローラを名前空間によってグループ化することもできます。
namespace :admin do
resources :users
end
※定義されたルーティングは以下の通りです。
HTTP動詞 | パス | コントローラ#アクション |
---|---|---|
GET | /admin/users | admin/users#index |
GET | /admin/users/new | admin/users#new |
POST | /admin/users | admin/users#create |
GET | /admin/users/:id | admin/users#show |
GET | /admin/users/:id/edit | admin/users#edit |
PATCH | /admin/users/:id | admin/users#update |
DELETE | /admin/users/:id | admin/users#destroy |
ルーティングの「concern」機能
concernを使うことで、他のリソースやルーティング内で使いまわせる共通のルーティングを宣言できます。
※concernはルーティング内のどの場所にでも配置できます。
# concernの定義
concern :commentable do
resources :comments
end
# 下記ルーティングと同義
resources :messages, concerns: :commentable
# 上記ルーティングと同義
resources :messages do
resources :comments
end
名前付きルーティングを使用する
:as
オプションを使うと、どんなルーティングにも名前を指定できます。
指定した名前_path
で、名前付きヘルパーメソッドを呼び出せます。
get 'exit', to: 'sessions#destroy', as: :logout
URLフォーマットを特定の形式に制限する
:constraints
オプションを使って、動的セグメントのURLフォーマットを特定の形式に制限できます。
# 「/photos/A12345」にマッチするもののみ許可
get 'photos/:id', to: 'photos#show', constraints: { id: /[A-Z]\d{5}/ }
ルーティンググロブ(ワイルドカードセ)を使う
*
を用いることでワイルドカードを利用できます。
get 'photos/*other', to: 'photos#unknown'
コントローラを指定する
:controller
オプションは、リソースで使うコントローラを明示的に指定します。
resources :users, controller: 'staffs'
※定義されたルーティングは以下の通りです。
HTTP動詞 | パス | コントローラ#アクション |
---|---|---|
GET | /users | staffs#index |
GET | /users/new | staffs#new |
POST | /users | staffs#create |
GET | /users/:id | staffs#show |
GET | /users/:id/edit | staffs#edit |
PATCH | /users/:id | staffs#update |
DELETE | /users/:id | staffs#destroy |
終わりに
現場でもよく使われるルーティングの技術だと思うので、「知らなかった。。」と恥をかかないように、今のうちに知っておきましょう!
参考
[Rails のルーティング]
(https://railsguides.jp/)