管理者って?
普段使ってるサービスは、大半がユーザーとして使っていると思いますが、管理者の画面も必要ですよね?
たとえば、ECサイトなら商品を選んで注文確定までの流れが、普段行っているユーザー側の機能です。
管理者側の流れは、売りたい商品の登録や顧客管理、注文の管理などが挙げられます。
ユーザーと管理者の動きって全然違いますよね。
ユーザーと管理者を分ける必要があるので、今回はその方法を解説していきます。
対象となる方
deviseで管理者(admin)を設定したい方向け
そもそもdeviseってなに?って方はこちら
deviseのかんたん導入手順
さくっとdeviseをつかってみる
開発環境
ruby 2.6.3
Rails 5.2.6
管理者追加
前提として、deviseでユーザー側の機能は追加済みと考えて進めていきます。
ターミナルで管理者を追加します。
管理者はnameカラム等いらないためそのままmigrateします。
$ rails g devise Admin
$ rails db:migrate
これで、adminのルーティングとモデルが作成されました。
管理者はあらかじめデータを登録しておき、新規登録せずにログインのみしたいため、seedファイルに初期データを格納します。
Admin.create!(
email: 'test@hoge.com',
password: 'testhoge',
)
初期データ追加したら、ターミナルでseedファイルを反映させます。
$ rails db:seed
ログイン画面使いますので、ビューも作成しておきましょう!
$ rails g devise:views admins
コントローラー、ビューの作成
ここまでで、管理者の追加が完了しました。
ECサイトを想定していますので、商品関連のコントローラーとしてproductsコントローラーとビューを作成します。
ユーザー側と管理者側はpublicとadminで、呼び出されるコントローラー、ビューをわけていきます。
ユーザー側は商品のindex,showページを作成します。
$ rails g controller public/products index show
これで、ユーザー側のindex,showページのコントローラーとビューが作成されました。
次に管理者側のコントローラー、ビューの作成をしていきます。
管理者側は商品のindex,show,new,editページを作成します。
$ rails g controller admin/products index show new edit
これで、ユーザー側と管理者側のコントローラー、ビューを分けることができました。
app/controllers/adminの中に管理者側のコントローラー
app/controllers/publicの中にユーザー側のコントローラー
app/views/adminの中に管理者側のビュー
app/views/publicの中にユーザー側のビュー
があることが確認できたと思います。
admin/products_controller.rbの1行目がclass Admin::ProductsControllerになってますので、これでadminのproductsコントローラーが呼ばれたら、admin/products_controller.rbのファイルが実行されることがわかります。
class Admin::ProductsController < ApplicationController
def index
end
def show
end
def new
end
def edit
end
end
ルーティング変更
コントローラーの作成時にadmin/コントローラー名をつけるとnamespaceが使えます。
このnamespaceがあることで、adminとpublicの処理をわけられています。
ルーティングをresourcesに変更しましょう。
Rails.application.routes.draw do
devise_for :admins
devise_for :users
root to: 'homes#index'
namespace :admin do
resources :products, only: [:new, :create, :index, :show, :edit, :update]
end
namespace :public do
resources :products, only: [:index, :show]
end
end
rails routesで確認してみましょう。
まとめ
これで、namespaceを使った管理者設定ができました。
あとは、必要なコントローラーやビューを管理者側とユーザー側で追加して行って、ECサイト作成していってください。
はじめてやったときは、なかなか理解ができなかったので、まだ理解できていなかった初心者の方の役に立ててれば幸いです。
あと、ECサイトの作成途中でdevise_forとnamespaceの順番を逆にしていてエラーが起きたので、devise_forを上に書くのをおすすめします。
