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.