Rails
devise

ユーザの情報をパスワードなく更新したい

More than 3 years have passed since last update.

問題

  • サインインしたユーザの情報を更新したいができなかった。

  • Rails.logger.info(@user.errors.messages.inspect) でログを見てみると、どうもパスワードがないため更新されない感じだった。

解決策

モデルで allow_blankを適応させた

model.rb
validates :password, presence: true, length: {minimum: 5, maximum: 120}

だった場合、

model.rb
validates :password, presence: true, length: {minimum: 5, maximum: 120}, on: :create
validates :password, length: {minimum: 5, maximum: 120}, on: :update, allow_blank: true

のように、updateが呼ばれるときだけはallow_blankで行う。

※ validates が重複してるので、うまくDRYでいける方法があれば教えて欲しいです…

参考

Devise 3 (rails 4) can't update user without password - Stack Overflow