こんにちは、たにーです。
チーム開発で管理者画面を簡単に作成できるgemを使わず、
deviseでuserとadminの2つを作成しました。
私は、担当エリアではなかったので
自分でも使えるようにしようと思い、手順を記述していきたいと思います。
基本的に参考文献に掲載したQiitaでできます。(笑)
#目次
- railsアプリ作成
- gemの導入
- modelの作成
- controllerの作成
- routes設定
- viewの作成
#railsアプリケーションを作成
$rails new qiita
#gem’devise’の導入
追加します。
gem 'deivse'
インストールします。
$bundle install
これが出たら完了です。
Bundle complete! 19 Gemfile dependencies, 84 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.
##deviseをインストール
$rails g devise:install
そうすると、多くのファイルが作成されます。
##configファイルの修正
次に、devise/rbファイルを変更します。
このような記述があるかと思います。
# ==> Scopes configuration
# Turn scoped views on. Before rendering "sessions/new", it will first check for
# "users/sessions/new". It's turned off by default because it's slower if you
# are using only default views.
# config.scoped_views = false
最後の行を修正します。
コメントアウト + trueに変更してください。
config.scoped_views = true
#deviseモデルの作成
userとadminのモデルを作成します。
$rails g devise user
Running via Spring preloader in process 7829
invoke active_record
create db/migrate/20210326064625_devise_create_users.rb
create app/models/user.rb
invoke test_unit
create test/models/user_test.rb
create test/fixtures/users.yml
insert app/models/user.rb
route devise_for :users
adminでも同じように実行します。
$rails g devise admin
#deviseコントローラーの作成
userとadminのコントローラーを作成します。
$rails g devise:controllers users
Running via Spring preloader in process 8205
create app/controllers/users/confirmations_controller.rb
create app/controllers/users/passwords_controller.rb
create app/controllers/users/registrations_controller.rb
create app/controllers/users/sessions_controller.rb
create app/controllers/users/unlocks_controller.rb
create app/controllers/users/omniauth_callbacks_controller.rb
===============================================================================
Some setup you must do manually if you haven't yet:
Ensure you have overridden routes for generated controllers in your routes.rb.
For example:
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions'
}
end
===============================================================================
adminでも同じように実行します。
$rails g devise:controllers admins
#routeの設定
次にローティングを設定します。
今の状態を確認してみると、
devise_for :users
devise_for :admins
実際にこれがどうなのかを確認するために、ルーティングを見てる。
$rails routes
Prefix Verb URI Pattern Controller#Action
#[--- 中略 ---]#
cancel_admin_registration GET /admins/cancel(.:format) devise/registrations#cancel
admin_registration POST /admins(.:format) devise/registrations#create
new_admin_registration GET /admins/sign_up(.:format) devise/registrations#new
edit_admin_registration GET /admins/edit(.:format) devise/registrations#edit
#[--- 中略 ---]#
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
#[--- 中略 ---]#
URLはしっかり、adminとuserで分けれているのが確認できます。
ただ、右側のコントローラーをみると全て、devise/.....の形になっています。
先ほど、$rails g devise:controllers usersした際に
最後に記載のあった文面を記載する必要があります。
Rails.application.routes.draw do
devise_for :users, controllers: {
sessions: 'users/sessions'
}
end
これを参考にし、routes.rbで書き足します。
devise_for :admins, controllers: {
sessions: 'admins/sessions',
passwords: 'admins/passwords',
registrations: 'admins/registrations'
}
devise_for :users, controllers: {
sessions: 'users/sessions',
passwords: 'users/passwords',
registrations: 'users/registrations'
}
admin,userのそれぞれに
どのコントローラーを使うのかを指定してあげます。
再度ルーティングを見てみると、、、、
$rails routes
Prefix Verb URI Pattern Controller#Action
#[--- 中略 ---]#
cancel_admin_registration GET /admins/cancel(.:format) admins/registrations#cancel
admin_registration POST /admins(.:format) admins/registrations#create
new_admin_registration GET /admins/sign_up(.:format) admins/registrations#new
edit_admin_registration GET /admins/edit(.:format) admins/registrations#edit
#[--- 中略 ---]#
cancel_user_registration GET /users/cancel(.:format) devise/registrations#cancel
user_registration POST /users(.:format) devise/registrations#create
new_user_registration GET /users/sign_up(.:format) devise/registrations#new
edit_user_registration GET /users/edit(.:format) devise/registrations#edit
#[--- 中略 ---]#
コントローラーが無事、adminsとusersで分けられています。
#viewsの作成
モデル作成時と同様です。
$rails g devise:views users
Running via Spring preloader in process 12348
invoke Devise::Generators::SharedViewsGenerator
create app/views/users/shared
create app/views/users/shared/_error_messages.html.erb
#[--- 中略 ---]#
adminでも同様に実行します。
$rails g devise:views admins
これで、admin側でもuser側でもviewの編集が可能になりました。
追記
2021年3月27日投稿
#参考文献