对“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_torespond_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 ,但与已经遇到的人没有任何关系。