Я изучаю Rails с помощью railstutorial.org, и меня кое-что смущает: в этой главе автор говорит нам провести некоторое тестирование в консоли с помощью respond_to?
метода объекта User, и он работает нормально. Но позже, когда мы напишем тест для :encrypted_password
атрибута, он использует respond_to
.
Из любопытства я попытался respond_to
найти в консоли объект User и получил сообщение об ошибке, в котором говорится, что метода не существует. Увы, если я попытаюсь написать тест с использованием respond_to?
вместо respond_to
, тест не запустится.
Может ли кто-нибудь объяснить мне разницу, и почему тест запускается только с respond_to
?
источник
?
знак в конце имени метода в ruby не гарантирует, что метод вернет логическое значение. Это?
просто часть имени метода, как и любой другой символ. То, что методы вопросительного знака должны возвращать логическое значение, - это устоявшееся соглашение, но оно не соблюдается повсеместно. (см., например, github.com/rails/rails/pull/5329 и суматоху, вызванную, когда метод вопросительного знака не возвратил логическое значение)respond_to?
является логическим вычислением.respond_to
Используется (обычно) для определения информации на дисплее. Больше информации здесь . Вrespond_to?
проверяет, если метод существует и возвращает истину , если она делает , и ложно , если оно не делает.источник
В тесте используются удобные помощники, чтобы сделать его более удобным.
Ruby - это Ruby, поэтому использование старого доброго
respond_to?
будет работать, если вы назовете его так:@user.respond_to?(:encrypted_password).should be_true
В
respond_to
контроллерах используется еще один, но он все еще не имеет ничего общего с теми, с которыми вы уже знакомы.источник