Railsでネームスペース(namespace)を使ってアドミン画面を開発する方法

Railsでネームスペース(namespace)を使ってアドミン画面を開発する方法をざっくりまとめます。

アドミン画面のURLをhttp://example.com/admin/*******といった具合にadminディレクトリ配下で展開したいとした場合の実装方法です。

アドミン画面用のコントローラー

まずアドミン版のapplication_controller.rbであるadmin_controller.rbを作成しておきます。アドミン画面では、ユーザー向けの画面とは異なる機能を実装していきますので、application_controller.rbと分けておいたほうが良いかと思います。

rails g controller admin

アドミン画面では、適応するレイアウトファイルがユーザー向けの画面と異なると思いますので、views/layouts配下にアドミン画面用のレイアウトファイルを作成し、admin_controller.rbで適応しておきます。また、ログインしていない状態でアクセスしたときのリダイレクト先URLも、アドミンログイン用の画面に設定等もするでしょう。

class AdminController < ApplicationController
    layout "admin"
  
    protected

    def not_authenticated
      redirect_to "/admin/login"
    end
end

次にアドミン画面のログイン用のコントローラーを作成してみます。adminというネームスペースを設定してコントローラーを作成すると、app/controllers/admin配下でコントローラーファイルが作成されます。

rails controller admin::user_sessions

admin::user_sessionsではAdminControllerを継承します。

class Admin::UserSessionsController < AdminController
    skip_before_action :require_login, except: [:destroy], raise: false

    def new
       省略
    end

    def create
    省略
    end

    def destroy
    省略
    end

end

アドミン画面のログイン機能は、ユーザーがアドミンか通常ユーザーかなど、ユーザータイプを判定することが必要です。下記の記事でその実装方法をまとめています。
参考:Railsアプリでenumでユーザー属性別にログイン後のページ遷移を振り分ける

こんな感じで、アドミン画面用のコントローラーをどんどん作成していきます。

ルーティング

routes.rbでは、namespaceを使って下記のような感じで、admin配下でURLが展開するように設定します。

  get "/admin/login" => "admin/user_sessions#new"
  namespace :admin do
    resources :user_sessions, only: [:create, :destroy]
    resources :dashboards
  end

これで、http://example.com/admin/dashboardsなどといったURLとなります。

参考:Rails(5)namespace でファイルを分ける方法

Ruby on Railsをこれから本格的に勉強したい人は「エンジニアになるための600時間のプログラミング学習に耐え抜くコツ」という記事がおすすめです。

シェアする

  • このエントリーをはてなブックマークに追加

フォローする