[Rails]deviseのカスタマイズ。ユーザー登録、編集後のリダイレクトページを変える方法と、編集時のパスワード入力をスキップする方法


駆け出しエンジニアの備忘録です。初投稿です。
またいつか「あれどうやるんだっけ?」となった時に再度調べるのも効率が悪いので、ここに残していこうと思います。
間違いなどがあればご報告をお願い致します。

デフォルトはrootパス

僕の環境だとrootはトップページにリダイレクトしてしまうので、どちらもユーザーの詳細画面に遷移するようにしたい。
deviseの導入などの準備は割愛いたします。

1.コントローラーの作成

$ rails g devise:controllers users

いくつか作成されたコントローラーの中で今回使うのはregistrations_controller.rb

ここに追記する

controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController

  # 以下を追記
  protected

  def after_sign_up_path_for(resource)
    flash[:notice] = '登録完了!編集ボタンからプロフィール画像と自己紹介文を登録できます。'
    user_path(resource) #ここにリダイレクト先のパスを指定
  end

  def after_update_path_for(resource)
    user_path(resource) #ここにリダイレクト先のパスを指定
  end
end

これでコントローラーの準備はok

2.routes.rbの編集

作成したコントローラーに
class Users::RegistrationsController < Devise::RegistrationsController
という記述があるように、元々deviseで使われているDevise::RegistrationsControllerを継承した新しいUsers::RegistrationsControllerを作成した、ということなので、ここに記述をしてくことで追加の設定を反映していくことができる。
(継承してるということに全然気付いておらず、「コントローラーを新しく作るってことはこのコメントアウトされてるnewアクションとかupdateアクションとか全部自分で触る必要あるのか!?」って焦ったけどそのままでも大丈夫だった)
ただしこのままではUsers::RegistrationsControllerを使うことができないので、
以下を記述して使うことを明示する必要がある。

routes.rb
devise_for :users, controllers: { registrations: 'users/registrations' }

これにより作成したコントローラが使えるようになりました。
ちゃんと指定したパスにリダイレクトされるはずです。

編集時のパスワードの入力をスキップする設定

デフォルトだと更新しようとしても設定中のパスワードを入力するように要求されてしまう。
パスワードの入力無しで更新できるようにします。
先程と同様に、コントローラーに以下を追記します。

controllers/users/registrations_controller.rb
  def update_resource(resource, params)
    resource.update_without_password(params)
  end

あとはviewにあるcurrent_passwordのフォーム部分を削除すればokです。

参考にさせていただいた記事(参考というより殆どそのまま)
https://qiita.com/Tatty/items/a9759755e562ac4693ec
https://note.com/ruquia7/n/n4838547cb054
https://qiita.com/machamp/items/f6a7b003fcda3f04094a