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
にのみ、最善の方法は何ですか?