Deviseで新規登録だけを無効化する
Deviseのregisterable moduleは新規登録registrations#newだけでなく、編集registrations#editや退会registrations#cancelも司っている
そのため、モデルに定義したdevise :registerableを消すと新規登録以外の機能も無効になってしまう
routes.rbでdevise_for :users, skip: [:registrations]とする方法も出てきたが、これも編集や退会がまとめて無効になってしまうので要件を満たさない
もともと以下のようにDevise::RegistrationsControllerを継承したコントローラーを作ってカスタマイズしていたので、そのコントローラーのbefore_actionで404を返すようにした
ほぼ参考記事の通りですね
code:ruby
# config/routes.rb
devise_for :users, controllers: {
registrations: 'users/registrations',
...
}
code:ruby
# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
before_action :disable_signup!, only: %inew create private
def disable_signup!
render file: Rails.root.join('public/404.html'), layout: false, status: :not_found
end
end