4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

namespaceを使ってdeviseで管理者設定

4
Posted at

管理者って?

普段使ってるサービスは、大半がユーザーとして使っていると思いますが、管理者の画面も必要ですよね?

たとえば、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ファイルに初期データを格納します。

db.seeds.rb
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のファイルが実行されることがわかります。

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に変更しましょう。

config/routes.rb
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で確認してみましょう。

スクリーンショット 2021-05-29 11.48.58.png
しっかりadminとpublicでわかれていますね。

まとめ

これで、namespaceを使った管理者設定ができました。
あとは、必要なコントローラーやビューを管理者側とユーザー側で追加して行って、ECサイト作成していってください。

はじめてやったときは、なかなか理解ができなかったので、まだ理解できていなかった初心者の方の役に立ててれば幸いです。

あと、ECサイトの作成途中でdevise_fornamespaceの順番を逆にしていてエラーが起きたので、devise_forを上に書くのをおすすめします。

4
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?