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を削除
詳しくは公式ドキュメントに書いてありますが、ドンピシャりな日本語情報が見当たらなかったので、本記事がトリガーになれば幸いです。
この記事が気に入ったらサポートをしてみませんか?