管理画面と公開画面 namespaceの使いどき
Webアプリケーションの開発では管理画面と公開画面を分けてRoutingを定義して、controllerを作ってアクションを定義していくことがある。そうしないと、例えば同じitems_controller.rbに多くのアクションが定義されて読みづらくなるし、どれが管理画面用アクションかとか、見分けがつきにくくなる。
今回はその分け方をまとめていく。
① routes.rbにnamespaceとmoduleで名前空間を作る
namespaceやmoduleで名前空間の指定をRoutingに記述すると、そのパスのグループ化ができる。全く同じ機能のRoutingでも、管理用と公開用で分けられるようになる。
routes.rb
namespace : admin do
resources :items
end
scope module: :public do
resources :items
end
このように記述すると、adminの方では、パスにnamespaceで指定した名前が加わる
admin_items_path GET /admin/items(.:format) admin/items#index
admin(管理者という意味)というパスのURLは全て管理用画面になる。
対して、publicの方では、パスに名前が加わらない
items_path GET /items(.:format) public/items#index
しかし、controller#actionの部分だけ名前がつく。moduleを使えば、パスには表示されないがRoutingの使い分けができることになる。なので公開用はmoduleによって名前空間を作る。
② ディレクトリを分けてcontrollerをつくる
apps/contorollers/admin(管理用)とapps/contorollers/public(公開用)の二つディレクトリを作る。その中にそれぞれitems_controller.rbを作成し、アクションを定義していく。
※ふたつディレクトリには新たにapplication_controller.rbを作成する。Application_controllerのクラスの継承をしないといけない。中身は
class Admin::ApplicationController < ApplicationController
end
class Public::ApplicationController < ApplicationController
end
Application_controllerが用意できたら、それぞれコントローラをつくる
class Admin::ItemsController < Admin::ApplicationController
def index
end
end
class Public::ItemsController < Public::ApplicationController
def index
end
end
③ Viewファイルのディレクトリを分ける
app/views/admin/items
app/views/public/items
にそれぞれVIewファイルを作っていく。管理用と公開用で見た目や機能が異なる仕様にするときに、うまく使い分けられる。
最初はnamespaceってなんだ?から始まったが、このように管理用と公開用をわけるんだなーっておもいました。