Ich lerne Rails mit railstutorial.org und bin über etwas verwirrt: In diesem Kapitel fordert der Autor uns auf, einige Tests in der Konsole mit der respond_to?
Methode für ein Benutzerobjekt durchzuführen, und es funktioniert einwandfrei. Aber später, wenn wir den Test für das :encrypted_password
Attribut schreiben, verwendet er respond_to
.
Aus Neugier habe ich respond_to
in der Konsole versucht , ein Benutzerobjekt zu finden, und es wird eine Fehlermeldung angezeigt, dass die Methode nicht vorhanden ist. Leider wird der Test nicht ausgeführt , wenn ich versuche, den Test mit respond_to?
anstelle von zu schreiben respond_to
.
Könnte mir jemand den Unterschied erklären und warum läuft der Test nur mit respond_to
?
quelle
?
am Ende eines Methodennamens in Ruby nicht , dass die Methode einen Booleschen Wert zurückgibt. Das?
ist wie jedes andere Zeichen nur ein Teil des Methodennamens. Dass Fragezeichenmethoden einen Booleschen Wert zurückgeben sollten, ist eine etablierte Konvention, die jedoch nicht allgemein befolgt wird. (Siehe zum Beispiel github.com/rails/rails/pull/5329 und die Aufregung, die verursacht wurde, als eine Fragezeichenmethode keinen Bool zurückgab)respond_to?
ist eine boolesche Bewertung. Dasrespond_to
wird (normalerweise) zur Bestimmung der Anzeigeinformationen verwendet. Weitere Informationen hier . Dierespond_to?
überprüft, ob ein Verfahren vorhanden ist, und gibt true zurück , wenn es funktioniert und falsch , wenn dies nicht der Fall.quelle
Der Test verwendet praktische Helfer, um benutzerfreundlicher zu sein.
Ruby ist Ruby, also würde die Verwendung des guten Alten
respond_to?
funktionieren, wenn Sie es so nennen:@user.respond_to?(:encrypted_password).should be_true
Es gibt eine andere,
respond_to
die in Controllern verwendet wird, aber immer noch nichts mit denen zu tun hat, die Sie bereits getroffen haben.quelle