首页 文章

对'respond_to' vs 'respond_to?'感到困惑

提问于
浏览
67

我正在使用railstutorial.org学习Rails,我对某些事情感到困惑:在this chapter中,作者告诉我们在控制台中使用 respond_to? 方法在User对象上进行一些测试,并且它可以正常工作 . 但是后来,当我们为 :encrypted_password 属性编写测试时,他使用 respond_to .

出于好奇,我在控制台中尝试了 respond_to ,对于User对象,我得到一个错误,说该方法不存在 . 唉,如果我尝试使用 respond_to? 而不是 respond_to 编写测试,则测试不会运行 .

有人可以解释我的区别,为什么测试只运行 respond_to

3 回答

  • 4

    该测试使用方便的帮助程序,以提高用户友好性 .

    Ruby是Ruby所以如果用这种方式调用它就可以使用好的旧 respond_to?

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

    在控制器中使用了另一个 respond_to 但仍然与您已经遇到的那些无关 .

  • 3

    respond_to? 是布尔评估 . respond_to (通常)用于确定显示信息 . More information here . respond_to? 检查方法是否存在,如果存在则返回true,如果不存在则返回false .

  • 154

    Ruby将 ?! 视为方法名称中的实际字符 . respond_torespond_to? 是不同的 . ? 表示这应该以true或false响应(按惯例;这不是必需的) . 特别:

    respond_to?Ruby method,用于检测类是否具有特定方法 . 例如,

    @user.respond_to?('eat_food')
    

    如果 User 类上有 eat_food 方法,则返回true .

    respond_toRails method,用于响应特定的请求类型 . 例如:

    def index
      @people = Person.find(:all)
    
      respond_to do |format|
        format.html
        format.xml { render :xml => @people.to_xml }
      end
    end
    

    但是,在RailsTutorial链接中,'ve provided, you'看到 RSpec 方法 should 与RSpec的respond_to方法交互 . 除非您运行 rails console test ,否则这将无法在您的控制台中使用 .

相关问题