Estoy aprendiendo Rails con railstutorial.org y algo me confunde: en este capítulo el autor nos dice que hagamos algunas pruebas en la consola con el respond_to?
método en un objeto User, y funciona bien. Pero más tarde, cuando escribimos la prueba para el :encrypted_password
atributo, usa respond_to
.
Por curiosidad, probé respond_to
en la consola, para un objeto Usuario, y aparece un error que dice que el método no existe. Por desgracia, si intento escribir la prueba usando en respond_to?
lugar de respond_to
, la prueba no se ejecuta.
¿Alguien podría explicarme la diferencia y por qué la prueba solo se ejecuta con respond_to
?
fuente
?
final del nombre de un método en ruby no garantiza que el método devolverá un booleano. El?
es sólo una parte del nombre del método, como cualquier otro carácter. Que los métodos de signo de interrogación deberían devolver un booleano es una convención bien establecida, pero no se sigue universalmente. (ver, por ejemplo, github.com/rails/rails/pull/5329 y la conmoción causada cuando un método de signo de interrogación no devolvió un bool)respond_to?
es una evaluación booleana. Serespond_to
utiliza (normalmente) para determinar la información de la pantalla. Más información aquí . Lasrespond_to?
comprobaciones para ver si existe un método y devuelve verdadero si lo hace y falso si no lo hace.fuente
La prueba utiliza ayudantes convenientes para que sea más fácil de usar.
Ruby es Ruby, por lo que usar el buen viejo
respond_to?
funcionaría si lo llama de esta manera:@user.respond_to?(:encrypted_password).should be_true
Hay otro que se
respond_to
usa en controladores pero aún nada que ver con los que ya conociste.fuente