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