Ich versuche, mein Programm so einzustellen, dass das Passwort nur dann validiert wird, wenn es geändert wird (damit ein Benutzer andere Informationen bearbeiten kann, ohne sein Passwort eingeben zu müssen).
Ich erhalte derzeit einen Fehler, der
lautet %Vor%wenn ich mich anmelde.
Hier ist mein Validierungscode in user.rb
:
Hier ist meine create Methode in users_controller.rb
:
Danke!
Ersetzen durch:
%Vor%Ich würde zwei verschiedene Validierungen machen:
%Vor%Ich stieß auf dasselbe Problem und nach dem Lesen dieses Posts implementierte ich den von apneadiving vorgeschlagenen Code in seiner Antwort, aber mit einer leichten Modifikation:
Ich habe zwei verschiedene Validierungen verwendet, eine für create:
%Vor%und dann habe ich diesen zum update benutzt:
%Vor% Ursprünglich habe ich genau das implementiert, was apneadiving vorgeschlagen hat, aber ich erkannte, dass es bei Updates für den Benutzer das Vorhandensein eines Strings nicht wirklich bestätigte. Wie in, erlaubte es einem Benutzer, sein Passwort auf " "
(eine Whitespace-Zeichenfolge) zu setzen. Dies liegt an der Tatsache, dass " ".blank? == true
, und wenn Sie es wie folgt validiert haben:
Dann wird die Validierung nicht ausgeführt, wenn eine Zeichenkette voller Leerzeichen vom Benutzer gesendet wurde, weil sie die Zeichenkette als leer liest. Dies impliziert im Wesentlichen den Effekt der Validierung für Anwesenheit auf dem Update. Der Grund, warum ich password.to_s.empty?
anstelle von einfach password.empty?
gemacht habe, besteht darin, Fehler zu vermeiden, wenn jemand update_attributes im Benutzermodell aufruft und nichts in das Feld password eingibt, dann ist das Passwort nil
und seit dem ruby nil
klasse hat kein leeres? Methode, wird es einen Fehler werfen. Wenn Sie .to_s
auf nil
aufrufen, wird dies jedoch in eine leere Zeichenfolge konvertiert, die bei einem nachfolgenden .empty?
-Aufruf den Wert true zurückgibt (die Validierung wird also nicht ausgeführt). Nach ein paar Versuchen und Schwierigkeiten fand ich heraus, dass dies der beste Weg war, dies zu tun.
Die Änderung, nach der in Rails 4 mindestens gesucht wird, ist password_digest
.
Tags und Links ruby-on-rails validation nomethoderror password-confirmation