##ルーティングのグループ化のメリット
namespace
の例を挙げて説明すると、
①集合を分けることで同じ名前を使うことができる
たとえば管理者用のログイン機能を実装するときに、user_sessions_controller
という名前を使おうとする。
しかし、既にサービスのログイン機能の実装の際に、その名前のコントローラー名を使用していると、アプリの挙動がおかしくなってしまう可能性がある。
②参照が簡単になる
ディレクトリを見たときに、グループ別でファイルを分けておくと、人間も管理しやすく、アプリケーションもファイルの参照が容易になる(メンテナンスしやすくなる)。
##namespace
/ scope
/ scope module
の違い
ルーティングのグループ化には、namespace
/ scope
/ scope module
の3つがある。
この3つの大まかな違いは以下の通り。
URL | ファイル構成 | |
---|---|---|
scope | 指定のパスにしたい | 変えたくない |
module | 変えたくない | 指定のパスにしたい |
namespace | 指定のパスにしたい | 指定のパスにしたい |
もっと分かりやすく区別すると、rails routes
した時に出てくる、 Prefix/URI/Pattern
この部分の差である。
###◆scope
scope
メソッドを用いてルーティングをグループ化すると、パスのみグループ化ができる。
しかし、パスをグループ化しただけで、呼び出すコントローラやPrefix
はルーティングをグループ化する前と同じ。
scope :admin do
resources :boards
end
###◆scope module
scope
メソッドとmodule
オプションを用いてルーティングをグループ化すると、呼び出すコントローラのアクションのみグループ化ができる。
Prefix
やパスに関しては、ルーティングをグループ化する前と同じ。
scope module: :admin do
resources :boards
end
###◆namespace
namespace
メソッド(名前空間)を用いてルーティングをグループ化すると、指定した名前空間名でルーティンングをグループ化することができる。
ターミナルで確認すると、Prefix, URIパス, Controller#Actionに名前空間名が付与されていることが分かる。
namespace
メソッドを用いたルーティングのグループ化は、名前空間によって識別されたコントローラのアクションを実行したい時に使用。(例の場合、名前空間名をadminとしている)
namespace :admin do
resources :boards
end
⚠️namespace
を利用するときは、Controller
内に実際のURLパス
と同様のディレクトリ構成を作る必要がある。
またこの例の場合、admin
のcontroller
を作成する際には、管理者用のコントローラを作成するにあたって、「管理系」のカテゴリとして区分したいため、**Admin::BaseController
**として命名する必要がある。
─ app
├ controllers
│└ 【名前空間名】
│ └ 【コントローラ名】_controller.rb
└ views
└ 【名前空間名】
└ 【コントローラ名】
└ 【アクション名】.html.erb
class 【名前空間名】::【コントローラ名】Controller < ApplicationController
アクション
end
ルーティングのグループ化についてのまとめは、以下の通りになる。
namespaceではPrefix、URI Pattern、Controller#Action
scopeではURI Pattern
のみ
scope moduleはController#Action
のみ
##参考記事
Railsのルーティングを学ぼう③
【Rails】ルーティングの色々な作成方法をざっくりまとめてみた
Railsのroutingにおけるscope / namespace / module の違い
【Ruby on Rails】ルーティング scope と namespace の違い
namespace を使ってコントローラーをグループ化する