やりたいこと
認証システムにDeviseを利用。
初回登録はメールアドレスとパスワードのみでメール認証後の本登録で名前などその他の項目を取得したい。(on:updateにてvalidationを設定)
app/model/user.rb
validates :name, presence: true, on: update
この時、初回登録のみ済ませた状態でパスワードの再発行をしようとすると上記のnameのバリデーションが引っかかってパスワードが再発行できない。これを解決したい。
※on:updateじゃないvalidationの場合にはinvalidなデータは存在しないはずなのでこのような事は起こりません。
validateの条件の追加
パスワードを変更する時on:updateのvalidationは無効になるよう修正。
app/model/user.rb
validates :name, presence: true, on: update, unless: :encrypted_password_changed?
これを忘れてると初回登録だけをやったユーザさんがパスワード忘れたときに何もできなくなるので要注意。