deviseの導入〜複数モデルを作成
deviseの導入
Gemfile に deviseを追記する。
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
また、これ以降コントローラを作成する際は以下のようにコマンドを実行し、public
とadmin
のどちらに作成するのかを指定しなければならない。
$ rails g controller public/items
複数ビューを作成
以下コマンドを実行し、user用とadmin用のビューファイルを作成します。
$ rails g devise:views publics
$ rails g devise:views admins
上記コマンドで作成したビューファイルのフォルダは
publics
とadmins
になっているので、
public
とadmin
に変更します。
また、それに伴い
admin/sessions/new.html.erb
admin/registrations/new.html.erb
public/sessions/new.html.erb
public/registrations/new.html.erb
内にあるレンダリング部分の記述も修正します。
publics → public
admins → admin
ルーティングの編集
現在、ルーティングの記述は以下のようになっています。
devise_for :users
devise_for :admins
これを、以下のように書き換えます。
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