複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定
オリジナルアプリケーション開発を行っています。
アプリケーション作成で勉強になった事をまとめていきます。
userとdoctorで複数のモデルを作成し、別々の新規登録画面、ログイン画面を作成します。通常は1つのログイン画面なのでルーティン設定など自動生成されますが、二つ作るとカスタマイズが必要で苦労した事をまとめていきます。
ruby '2.6.5'
rails '6.0.0'
まずdeviseをインストールします。
gem 'devise'
インストールします。
% bundle install
再起動してGemを反映させます。
% rails s
deviseを使用するためには、Gemのインストールに加え、 devise専用のコマンドで設定ファイルを作成する必要があるので、設定関連に使用するファイル」を自動で生成するコマンドをします。
% rails g devise:install
ここからがいつもと違うカスタマイズです。
1. config/initializers/devise.rbをいじる。
rails g devise:installで生成したファイルにconfig/initializers/devise.rbがあります。
そのファイルの
# config.scoped_views = false
これを
config.scoped_views = true
にコメントアウトを外し、変更します。わかりにくいのですが大体247行目にあると思います。
2. それぞれのdeviseに関連するモデルを作ります。
% rails g devise user
% rails g devise doctor
それぞれ複数のファイルが生成されます。
3. それぞれのモデルに関連するコントローラーを作ります。
% rails g devise:controllers users
% rails g devise:controllers doctors
controllers(複数形)にして名前も(複数形)にします。
4. それぞれのdeviseに関連するビューを作ります。
% rails g devise:views users
% rails g devise:views doctors
これでMVCのdevise関連ファイルは作成出来ました。
ここまでは通常の1つのdeviseの作成とほぼ似てますね。
5. 次にルーティングの作成します。
Rails.application.routes.draw do
devise_for :doctors, controllers: {
sessions: 'doctors/sessions',
passwords: 'doctors/passwords',
registrations: 'doctors/registrations'
}
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
この様にそれぞれのルーティングがかぶらない様にします。
ルーティングを見ると、
Prefix Verb URI Pattern Controller#Action
new_doctor_session GET /doctors/sign_in(.:format) doctors/sessions#new
doctor_session POST /doctors/sign_in(.:format) doctors/sessions#create
destroy_doctor_session DELETE /doctors/sign_out(.:format) doctors/sessions#destroy
new_doctor_password GET /doctors/password/new(.:format) doctors/passwords#new
edit_doctor_password GET /doctors/password/edit(.:format) doctors/passwords#edit
doctor_password PATCH /doctors/password(.:format) doctors/passwords#update
PUT /doctors/password(.:format) doctors/passwords#update
POST /doctors/password(.:format) doctors/passwords#create
cancel_doctor_registration GET /doctors/cancel(.:format) doctors/registrations#cancel
new_doctor_registration GET /doctors/sign_up(.:format) doctors/registrations#new
edit_doctor_registration GET /doctors/edit(.:format) doctors/registrations#edit
doctor_registration PATCH /doctors(.:format) doctors/registrations#update
PUT /doctors(.:format) doctors/registrations#update
DELETE /doctors(.:format) doctors/registrations#destroy
POST /doctors(.:format) doctors/registrations#create
new_user_session GET /users/sign_in(.:format) users/sessions#new
user_session POST /users/sign_in(.:format) users/sessions#create
destroy_user_session DELETE /users/sign_out(.:format) users/sessions#destroy
new_user_password GET /users/password/new(.:format) users/passwords#new
edit_user_password GET /users/password/edit(.:format) users/passwords#edit
user_password PATCH /users/password(.:format) users/passwords#update
PUT /users/password(.:format) users/passwords#update
POST /users/password(.:format) users/passwords#create
cancel_user_registration GET /users/cancel(.:format) users/registrations#cancel
new_user_registration GET /users/sign_up(.:format) users/registrations#new
edit_user_registration GET /users/edit(.:format) users/registrations#edit
user_registration PATCH /users(.:format) users/registrations#update
PUT /users(.:format) users/registrations#update
DELETE /users(.:format) users/registrations#destroy
POST /users(.:format) users/registrations#create
となります。userとdoctorのルーティングが別々のものが出来ます。
form_withでuserは新規登録画面とログイン画面いけたのですが、doctorのルーティングがうまく出来なっかったので記事にしました。
Author And Source
この問題について(複数のdeviseを作成して、別々のログイン画面を作る際のファイル作成からルーティング設定), 我々は、より多くの情報をここで見つけました https://qiita.com/kinpin/items/067eff7d2fbe74d85c83著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .