Versuchen:
validates_confirmation_of :password, :if => :password_required?
validates :password_confirmation, :presence => true, :if => '!password.nil?'
Beachten Sie, dass die Validierung nur ausgelöst wird, wenn password_required?
kehrt wahr zurück, und password_required?
wird falsch zurückgeben, wenn das password_confirmation
Feld ist null.
Also um zu machen password_confirmation
Feld, um Null zu sein, müssen Sie einfach das entfernen password_confirmation
Feld aus dem Formular und auf diese Weise werden Sie es immer neigen, um die Validierungen umzugehen.
Alternative Lösungen:
1) Überspringen Sie die Überprüfung des Kennwortfelds
2) Speichern Sie einfach eine zufällige sicher generierte Nummer im Feld Kennwort (besser, weil es einfach ist und die Konsistenz aufrechterhalten).
self.password = self.password_confirmation = SecureRandom.urlsafe_base64(n=6)
Wenn Sie möchten, dass solche Felder anders angegeben werden sollen, wie der Benutzer, dann können Sie ein einzigartige Passwörter angeben, so dass Sie später einzigartige Kennwörter angeben.
if(self.password == "something unique" and self.password_confirmation == "something unique")
flash[:notice] = "The user has not password"
end
Auf der UI-Ebene zeigen Sie einfach mit dem obigen Zustand mit dem Rohling an.