0
0

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 3 years have passed since last update.

userとadmin画面の作成手順について

Last updated at Posted at 2021-03-26

こんにちは、たにーです。

チーム開発で管理者画面を簡単に作成できるgemを使わず、
deviseでuserとadminの2つを作成しました。

私は、担当エリアではなかったので
自分でも使えるようにしようと思い、手順を記述していきたいと思います。

基本的に参考文献に掲載したQiitaでできます。(笑)

#目次

  • railsアプリ作成
  • gemの導入
  • modelの作成
  • controllerの作成
  • routes設定
  • viewの作成

#railsアプリケーションを作成

terminal
 $rails new qiita

#gem’devise’の導入

追加します。

Gemfile
 gem 'deivse'

インストールします。

terminal
 $bundle install

これが出たら完了です。

terminal
Bundle complete! 19 Gemfile dependencies, 84 gems now installed.
Use `bundle info [gemname]` to see where a bundled gem is installed.

##deviseをインストール

terminal
 $rails g devise:install

そうすると、多くのファイルが作成されます。

##configファイルの修正

次に、devise/rbファイルを変更します。
このような記述があるかと思います。

/config/initializers/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/initializers/devise.rb
 config.scoped_views = true

#deviseモデルの作成

userとadminのモデルを作成します。

terminal(user)
$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でも同じように実行します。

terminal(admin)
$rails g devise admin

#deviseコントローラーの作成

userとadminのコントローラーを作成します。

terminal(user)
$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でも同じように実行します。

terminal
$rails g devise:controllers admins

#routeの設定

次にローティングを設定します。
今の状態を確認してみると、

config/routes.rb

devise_for :users
devise_for :admins

実際にこれがどうなのかを確認するために、ルーティングを見てる。

terminal

$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した際に
最後に記載のあった文面を記載する必要があります。

terminal
    Rails.application.routes.draw do
      devise_for :users, controllers: {
        sessions: 'users/sessions'
      }
    end

これを参考にし、routes.rbで書き足します。

config/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のそれぞれに
どのコントローラーを使うのかを指定してあげます。

再度ルーティングを見てみると、、、、

terminal
$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の作成

モデル作成時と同様です。

terminal(user)
$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でも同様に実行します。

terminal(admin)
$rails g devise:views admins

これで、admin側でもuser側でもviewの編集が可能になりました。

追記

2021年3月27日投稿

#参考文献

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?