Rails + Deviseでは、ModelにDeviseのモジュールを組み込むと、自動的に routes へ URI Pattern が追加されます。
例えば、
Rails.application.routes.draw do root to: 'home#index' devise_for :users end
な routes.rb の時、DeviseのModelが
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, # :confirmable, :validatable, :lockable end
な場合、
% bin/rails routes ... user_registration PATCH /users(.:format) PUT /users(.:format) DELETE /users(.:format) POST /users(.:format) new_user_unlock GET /users/unlock/new(.:format) user_unlock GET /users/unlock(.:format)
となります。
この状態で、Deviseの Confirmable
のコメントアウトを外し
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :confirmable, :validatable, :lockable end
とすると
% bin/rails routes ... user_registration PATCH /users(.:format) PUT /users(.:format) DELETE /users(.:format) POST /users(.:format) new_user_confirmation GET /users/confirmation/new(.:format) # 追加 user_confirmation GET /users/confirmation(.:format) # 追加 POST /users/confirmation(.:format) # 追加 new_user_unlock GET /users/unlock/new(.:format) user_unlock GET /users/unlock(.:format)
になります。
ただ、
Confirmable
モジュールは使いたいURI Pattern
を追加したくない
の場合はどうすればよいか迷ったため、メモを残します。
目次
環境
- Rails 6.1.3.2
- Devise 3.8.0
対応
routes.rb の devise_for
の skip
を使います。
ruby on rails 3 - How do I remove the Devise route to sign up? - Stack Overflow
例えば、Modelが
class User < ApplicationRecord devise :database_authenticatable, :registerable, :recoverable, :confirmable, :validatable, :lockable end
の時に、routes.rbを
Rails.application.routes.draw do root to: 'home#index' devise_for :users, skip: ['confirmations'] # 追加 end
とすると、
% bin/rails routes ... user_registration PATCH /users(.:format) PUT /users(.:format) DELETE /users(.:format) POST /users(.:format) new_user_unlock GET /users/unlock/new(.:format) user_unlock GET /users/unlock(.:format)
confirmable
のURI Patternがなくなりました。