DeviseのURLを変更する

【前提】
Rails 6.0.2
Devise 4.7.1

Ruby on Railsでユーザー登録周りの機能を実装しようとすると、Deviseというgemを使うことが多いと思います。
この際、仮にdeviseでUserモデルを作成した場合、URLには必ず/usersという文字列が含まれてしまうので、これを変えるために以下の記事を参考に実装してみました。
ところが、恐らくバージョンの違いによるものとは思いますが、そのままではいくつか不具合があったのでメモしておきます。
https://qiita.com/suin/items/b479000c49d2468a6260

◆ぶつかった壁たち
・NoMethodError undefined method `user_signed_in?'
・Invalid route name, already in use: 'new_user_session'
・uninitialized constant DeviseInvitable

↓元記事にあったもの

Rails.application.routes.draw do
 root 'top#index'

 devise_scope :user do
   get 'login' => 'devise/sessions#new', as: :new_user_session
   post 'login' => 'devise/sessions#create', as: :user_session
   delete 'logout' => 'devise/sessions#destroy', as: :destroy_user_session
   get 'signup' => 'devise_invitable/registrations#new', as: :new_user_registration
   post 'signup' => 'devise_invitable/registrations#create', as: :user_registration
   get 'signup/cancel' => 'devise_invitable/registrations#cancel', as: :cancel_user_registration
   get 'user' => 'devise_invitable/registrations#edit', as: :edit_user_registration
   patch 'user' => 'devise_invitable/registrations#update', as: nil
   put 'user' => 'devise_invitable/registrations#update', as: :update_user_registration
   delete 'user' => 'devise_invitable/registrations#destroy', as: :destroy_user_registration
   get 'password' => 'devise/passwords#new', as: :new_user_password
   post 'password' => 'devise/passwords#create', as: :user_password
   get 'password/edit' => 'devise/passwords#edit', as: :edit_user_password
   patch 'password' => 'devise/passwords#update'
   put 'password' => 'devise/passwords#update', as: :update_user_password
 end
 resources :users
end

↓修正したもの

Rails.application.routes.draw do
 root 'top#index'

 devise_for :users, skip: :all
 devise_scope :user do
   get 'login' => 'devise/sessions#new', as: :new_user_session
   post 'login' => 'devise/sessions#create', as: :user_session
   delete 'logout' => 'devise/sessions#destroy', as: :destroy_user_session
   get 'signup' => 'devise/registrations#new', as: :new_user_registration
   post 'signup' => 'devise/registrations#create', as: :user_registration
   get 'signup/cancel' => 'devise/registrations#cancel', as: :cancel_user_registration
   get 'user' => 'devise/registrations#edit', as: :edit_user_registration
   patch 'user' => 'devise/registrations#update', as: nil
   put 'user' => 'devise/registrations#update', as: :update_user_registration
   delete 'user' => 'devise/registrations#destroy', as: :destroy_user_registration
   get 'password' => 'devise/passwords#new', as: :new_user_password
   post 'password' => 'devise/passwords#create', as: :user_password
   get 'password/edit' => 'devise/passwords#edit', as: :edit_user_password
   patch 'password' => 'devise/passwords#update'
   put 'password' => 'devise/passwords#update', as: :update_user_password
 end
end

変更点は以下の通りです。
1. 4行目のdevise_for :usersに対してskip: :allを追加
2. devise_invitableを一律でdeviseに置換
3. resources :userを削除

詳しくは公式ドキュメントに書いてありますが、ドンピシャりな日本語情報が見当たらなかったので、本記事がトリガーになれば幸いです。


この記事が気に入ったらサポートをしてみませんか?