概要
アプリケーションにて管理者専用画面を作ろうとした際、名前空間(namespace)という概念を採用したのでどのようなものなのか簡単にまとめてみます。
名前空間とは
元々のクラスに対しモジュールを追加したクラスを新たに作成する。その時、元々のクラスとモジュールを追加したクラスは別物と区別されます。その状態を別の名前空間にあるという。
# 下記二つのクラスは別物と区別される
Admin::UsersController
UsersController
このように二つのコントローラを分ければ、管理者と一般ユーザーを容易に別のコントローラで分けることができます。
ディレクトリの設定
名前空間を使った場合、ディレクトリは名前空間ごとにサブディレクトリを作ります。
名前空間を使ったルーティングの設定
ルーティングの設定はnamespaceメソッドを使用し、引数に名前空間の名前をシンボルで設定し、ブロックで囲みます。
namespace :admin do
root "top#index"
resources :users
end
urlパスは/adminからそれぞれのアクションへルーティングが設定されます。
パスの指定は下記のような例があります。
<%= link_to "管理者用ページ", :admin_root %>
<%= link_to "ユーザー新規作成(管理者用)", :new_admin_users %>
<%= link_to "ユーザー一覧(管理者用)", :admin_users %>
<%= link_to "ユーザー編集(管理者用)", [:edit, :admin, :user] %>
class Admin::UsersController < Admin::Base
#省略
redirect_to [:admin, @user]
補足
名前空間を使用する、特にコントローラを分ける際、コントローラによって操作や表示を切り替える場面は多くあると思います。kind_ofメソッドを使えばコントローラによって条件分岐等をする際便利です。
<% if controller.kind_of?(Admin::UsersController) %>
まとめ
名前空間について簡単にまとめました。
簡単なアプリケーションであれば、一つずつ条件分岐すれば良いのですが、複雑なアプリケーションにそのようには行かないので、便利な機能でありプログラミングらしい機能だなと思いました。