Undefinierte Methode password_changed? Error

8

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 :

%Vor%

Hier ist meine create Methode in users_controller.rb :

%Vor%

Danke!

    
steffi2392 16.08.2011, 15:37
quelle

4 Antworten

5

Ersetzen durch:

%Vor%

Ich würde zwei verschiedene Validierungen machen:

%Vor%     
apneadiving 16.08.2011, 15:40
quelle
3

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:

%Vor%

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.

    
Batkins 14.10.2011 18:19
quelle
1

Die Änderung, nach der in Rails 4 mindestens gesucht wird, ist password_digest .

%Vor%     
Jacob Evan Shreve 17.07.2015 23:48
quelle
1

Beendet hier diese Fehlermeldung googlen und

verwenden

@account.encrypted_password_changed?

hat in meinem Fall ergeben, was ich wollte.

    
tirdadc 04.11.2015 04:24
quelle