User モデルに関連付けられた 4 つのフォームがあります。
- 登録(新規) - パスワードが必要です -
email, name, password, password_confirmation - 設定の編集(編集) - パスワードは必要ありません -
email, name - パスワードの変更- パスワードが必要です。ログインしているユーザーがパスワードを変更するためのページ -
current_password, password, password_confirmation - パスワードのリセット- パスワードが必要です。認証されていないユーザーがパスワード リセット メールから受信した後、パスワードを変更するためのページ -
password, password_confirmation
私が持っている最も近い検証ソリューションは-
validates :password, presence: true, length: { minimum: 6 }, on: :update, if: lambda{ |u| u.password.blank? }
これはポイント 1、3、および 4 を満たしますが、ユーザーが属性を更新することはできませんdef update(ポイント 2) がないparams[:user][:password]ため、{presence: true}検証がトリガーされます。
フォームにパスワードフィールドが含まれている場合validate_presence_of :passwordにのみ、最善の方法は何ですか?