😎

deviseの導入〜複数モデルを作成

2023/09/03に公開

deviseの導入

Gemfile に deviseを追記する。

Gemfile
gem 'devise'

以下コマンドを実行する。

$ bundle install
$ rails g devise:install

これで deviseの導入が完了しました!

複数モデルを作成

以下コマンドを実行する。

$ rails g devise User
$ rails g devise Admin

上記コマンドで作成した migrationファイルに必要なカラム等を追記する。
その後、以下コマンドを実行する。

$ rails db:migrate

これで、複数のモデルを作成できました!

複数コントローラを作成

以下のコマンドを実行し、user用とadmin用のコントローラを作成します。

$ rails g devise:controllers public
$ rails g devise:controllers admin

また、これ以降コントローラを作成する際は以下のようにコマンドを実行し、publicadminのどちらに作成するのかを指定しなければならない。

$ rails g controller public/items

複数ビューを作成

以下コマンドを実行し、user用とadmin用のビューファイルを作成します。

$ rails g devise:views publics
$ rails g devise:views admins

上記コマンドで作成したビューファイルのフォルダは
publicsadminsになっているので、
publicadminに変更します。

また、それに伴い
admin/sessions/new.html.erb
admin/registrations/new.html.erb
public/sessions/new.html.erb
public/registrations/new.html.erb
内にあるレンダリング部分の記述も修正します。

publics → public
admins → admin

ルーティングの編集

現在、ルーティングの記述は以下のようになっています。

routes.rb
  devise_for :users
  devise_for :admins

これを、以下のように書き換えます。

routes.rb
  devise_for :users,skip: [:passwords], controllers: {
    registrations: "public/registrations",
    sessions: 'public/sessions'
  }

  devise_for :admin, skip: [:registrations, :passwords] ,controllers: {
  registrations: "admin/registrations",
  sessions: "admin/sessions"
  }

※今回は、「forget your password?」の部分を使用しないので、スキップさせています。

それに伴い、ビューファイルの該当部分を削除します。
views/public/shared/_links.html.erb
views/admin/shared/_links.html.erb

上記2ファイルの 'sessions'と'registrations'の部分だけを残し、それ以外を削除します。

これで、顧客側・管理者側の新規登録・ログイン画面が完成しました!

Discussion