管理画面と公開画面 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ってなんだ?から始まったが、このように管理用と公開用をわけるんだなーっておもいました。