对“respond_to”和“respond_to?”感到困惑
我正在用railstutorial.org学习Rails,我对此有些困惑:在本章中 ,作者告诉我们在控制台中用respond_to?
做一些testingrespond_to?
方法在一个用户对象,它工作正常。 但后来,当我们为:encrypted_password
属性编写testing时,他使用respond_to
。
出于好奇,我试图在控制台的respond_to
,一个用户对象,我得到一个错误,说方法不存在。 唉,如果我尝试使用respond_to?
编写testingrespond_to?
而不是respond_to
,testing不运行。
有人可以解释我的区别,为什么testing只与respond_to
运行?
Ruby对待?
和!
作为方法名称中的实际字符。 respond_to
和respond_to?
是不同的。 ?
表明这应该是真实的还是错误的(按照惯例,这不是要求)。 特别:
respond_to?
是一个用于检测类是否具有特定方法的Ruby方法 。 例如,
@user.respond_to?('eat_food')
如果User
类具有eat_food
方法,则返回true。
respond_to
是用于响应特定请求types的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。
testing使用方便的帮手来更加方便用户。
Ruby是Ruby,所以使用旧的respond_to?
如果你这样叫:
@user.respond_to?(:encrypted_password).should be_true
在控制器中还有另一个respond_to
,但与已经遇到的人没有任何关系。