Confused about 'respond_to' vs 'respond_to?'

99封情书 提交于 2019-12-02 16:20:19

Ruby treats ? and ! as actual characters in a method name. respond_to and respond_to? are different. ? indicates that this should respond with a true or false (by convention; this is not a requirement). Specifically:

respond_to? is a Ruby method for detecting whether the class has a particular method on it. For example,

@user.respond_to?('eat_food')

would return true if the User class has an eat_food method on it.

respond_to is a Rails method for responding to particular request types. For example:

def index
  @people = Person.find(:all)

  respond_to do |format|
    format.html
    format.xml { render :xml => @people.to_xml }
  end
end

However, in the RailsTutorial link you've provided, you're seeing an RSpec method should interacting with RSpec's respond_to method. This wouldn't be available in your console, unless you run rails console test.

Micharch54

respond_to? is a Boolean evaluation. The respond_to is used (normally) for determining the display information. More information here. The respond_to? checks to see if a method exists and returns true if it does and false if it doesn't.

The test uses convenient helpers to be more user friendly.

Ruby is Ruby so using the good old respond_to? would work if you call it this way:

 @user.respond_to?(:encrypted_password).should be_true

There is another respond_to used in controllers but still nothing to do with those you already met.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!