LoginSignup
1
2

More than 1 year has passed since last update.

【Rails】ルーティングの個人的よく使う小技集

Last updated at Posted at 2021-06-06

はじめに

ルーティングが無いとアプリケーションは動かないですよね。それくらい重要な要素ですが、意外と知られていない機能があるのです。それを使いこなすことで、より便利で分かりやすいルーティングを定義できると思うので、小技を習得していってください!

小技集

リソースフルなルーティングを一括定義する

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 のルーティング

1
2
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
1
2