ruby on rails - Confundido sobre ''responder_ a'' frente a ''responder_ a?''
ruby-on-rails railstutorial.org (3)
La prueba utiliza ayudantes convenientes para ser más amigable para el usuario.
Ruby es Ruby así que usando el viejo respond_to? viejo respond_to? funcionaría si lo llamas de esta manera:
@user.respond_to?(:encrypted_password).should be_true
Hay otra respond_to usa en los controladores, pero que aún no tiene nada que ver con los que ya conociste.
Estoy aprendiendo Rails con railstutorial.org, y estoy confundido acerca de algo: en este capítulo, el autor nos dice que hagamos algunas pruebas en la consola con la respond_to? método en un objeto Usuario, y funciona bien. Pero más tarde, cuando escribimos la prueba para el atributo :encrypted_password , él usa respond_to .
Por curiosidad, intenté respond_to en la consola, por un objeto de Usuario, y recibí un error que decía que el método no existía. Por desgracia, si trato de escribir la prueba con respond_to? en lugar de respond_to , la prueba no se ejecuta.
¿Podría alguien explicarme la diferencia y por qué la prueba solo se ejecuta con respond_to ?
Ruby trata ? y ! como personajes reales en un nombre de método. respond_to y respond_to? son diferentes. ? indica que esto debería responder con un verdadero o falso (por convención, esto no es un requisito). Específicamente:
respond_to? es un método de Ruby para detectar si la clase tiene un método particular. Por ejemplo,
@user.respond_to?(''eat_food'')
devolvería true si la clase User tiene un método eat_food en él.
respond_to es un método de Rails para responder a tipos de solicitudes particulares. Por ejemplo:
def index
@people = Person.find(:all)
respond_to do |format|
format.html
format.xml { render :xml => @people.to_xml }
end
end
Sin embargo, en el enlace RailsTutorial que proporcionó, está viendo que un método RSpec should interactuar con el método respond_to de respond_to . Esto no estaría disponible en su consola, a menos que ejecute la rails console test .
respond_to? es una evaluación booleana. El respond_to se usa (normalmente) para determinar la información de visualización. Más información aquí . La respond_to? comprueba si existe un método y devuelve verdadero si lo hace y falso si no lo hace.