[英]Confused about 'respond_to' vs 'respond_to?'
我正在用railstutorial.org学习Rails,并且对某些事情感到困惑:在本章中 ,作者告诉我们在控制台中使用react_to进行一些测试respond_to?
用户对象上的方法,它可以正常工作。 但是后来,当我们为:encrypted_password
属性编写测试时,他使用了respond_to
。
出于好奇,我在控制台中尝试了User对象的respond_to
,但收到一条错误消息,指出该方法不存在。 ,如果我尝试使用respond_to?
编写测试respond_to?
而不是respond_to
,测试不会运行。
有人可以解释一下两者之间的区别,为什么测试仅使用respond_to
运行?
红宝石请客?
和!
作为方法名称中的实际字符。 respond_to
和respond_to?
是不同的。 ?
表示这应该以对或错来响应(按照惯例;这不是必需的)。 特别:
respond_to?
是用于检测类是否具有特定方法的Ruby方法 。 例如,
@user.respond_to?('eat_food')
如果User
类上具有eat_food
方法,则将返回true。
respond_to
是用于响应特定请求类型的Rails方法 。 例如:
def index
@people = Person.find(:all)
respond_to do |format|
format.html
format.xml { render :xml => @people.to_xml }
end
end
但是,在您提供的RailsTutorial链接中,您看到RSpec方法should
与RSpec的respond_to
方法进行交互。 除非您运行rails console test
,否则它在您的控制台中将不可用。
respond_to?
是布尔值评估。 通常, respond_to
用于确定显示信息。 更多信息在这里 。 对respond_to?
检查方法是否存在,如果存在,则返回true,否则返回false。
该测试使用方便的助手来使用户更加友好。
Ruby是Ruby,因此使用好的旧版respond_to?
如果以这种方式调用它将起作用:
@user.respond_to?(:encrypted_password).should be_true
控制器中还有另一个respond_to
,但与您已经遇到的那些无关。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.