2018-01-22

Deviseでユーザー情報を更新するときに現在のパスワードを入れさせたくないけどパスワードを更新するときだけは入れさせたい

という要望を叶えた。ビューはapp/views/users/registrations/edit.html.erbをいい感じにしてください。

# app/controllers/users/registrations_controller.rb
class Users::RegistrationsController < Devise::RegistrationsController
  protected
  def update_resource(resource, params)
    if params[:password].present?
      resource.update_without_current_password(params)
    else
      resource.update_without_password(params)
    end
  end
end

# app/models/user.rb
class User < ApplicationRecord
  def update_without_current_password(params)
    if params[:password].blank? && params[:password_confirmation].blank?
      params.delete(:password)
      params.delete(:password_confirmation)
    end
    update(params).tap { clean_up_passwords }
  end
end

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です