私はアマル・クマールSソリューションを試してみましたが、残念ながらそれは同じ問題を解決するために私を助けていなかったので、ここで実際のプロジェクトでテスト済みのソリューションのバージョンを変更しています。
ここには、devise/models/validatableのコードがあります。ユーザー情報を更新しながら、この条件が常に偽であるので、あなたは、空白のパスワードとパスワードの確認フィールドを離れるとき、RBモジュール
protected
# Checks whether a password is needed or not. For validations only.
# Passwords are always required if it's a new record, or if the password
# or confirmation are being set somewhere.
def password_required?
!persisted? || !password.nil? || !password_confirmation.nil?
end
は、検証が失敗します。
!password.nil? || !password_confirmation.nil?
パスワードとpassword_confirmationフィールドは空白の文字列を「」等しいです決してゼロに等しくはありません。ですから、あなたはpassword_requiredを上書きすることでそれを修正できますか?あなたのユーザモデルのメソッドを変更し、nilを変更しますか?空白にチェックしますか?チェック。
protected
def password_required?
!persisted? || !password.blank? || !password_confirmation.blank?
end
これを修正するのが最も簡単な方法だと思ってください。それは元のロジックを破壊しません。多分それは夢のバグだ。
これを使用して私のユースケースを処理し、コンソールからユーザーを追加するときのパスワード要件をスキップしました(私はdevise_invitableモジュールを使用しています)。それを達成するために '!persisted?'を 'persisted? 'に変更しなければなりませんでした。 –