Смущен "ответить на" vs " ответить?'

Я изучаю рельсы с railstutorial.org, и я смущен чем-то: в эта глава автор говорит нам сделать некоторое тестирование в консоли с respond_to? метод на объекте пользователя, и он работает нормально. Но позже, когда мы напишем тест для

3 ответов


Руби лечит ? и ! как фактические символы в имени метода. respond_to и respond_to? разные. ? указывает, что должны ответьте true или false (по соглашению; это не является требованием). В частности:

respond_to? это Рубин метод для обнаружения, имеет ли класс определенный метод на нем. Например,

@user.respond_to?('eat_food')

вернет true, если User класс имеет eat_food метод.

respond_to это рейлинги метод для ответа на определенные типы запросов. Например:

def index
  @people = Person.find(:all)

  respond_to do |format|
    format.html
    format.xml { render :xml => @people.to_xml }
  end
end

однако, в железнодорожном сообщении, которое вы предоставили, вы видите RSpec метод should взаимодействие с RSpec это respond_to метод. Это не будет доступно в вашей консоли, если вы не запустите rails console test.


respond_to? является логической оценкой. The respond_to используется (обычно) для определения отображаемой информации. подробнее здесь. The respond_to? проверяет, существует ли метод, и возвращает true, если да, и false, если нет.


тест использует удобные помощники, чтобы быть более удобным для пользователя.

Ruby-это Ruby, поэтому используйте старый добрый respond_to? будет работать, если вы называете это так:

 @user.respond_to?(:encrypted_password).should be_true

есть еще respond_to используется в контроллерах, но все равно ничего общего с теми, кого вы уже встречали.