Смущает 'откликнуться' против ответить на?'


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

3 67

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? является логической оценкой. Элемент respond_to используется (обычно) для определения отображаемой информации. подробнее здесь. Элемент respond_to? проверяет, существует ли метод и возвращает true, если это так, и false, если это не так.

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

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

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

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