ruby-on-rails railstutorial.org

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.