簡體   English   中英

對“ respond_to”和“ respond_to”感到困惑?

[英]Confused about 'respond_to' vs 'respond_to?'

我正在用railstutorial.org學習Rails,並且對某些事情感到困惑:在本章中 ,作者告訴我們在控制台中使用react_to進行一些測試respond_to? 用戶對象上的方法,它可以正常工作。 但是后來,當我們為:encrypted_password屬性編寫測試時,他使用了respond_to

出於好奇,我在控制台中嘗試了User對象的respond_to ,但收到一條錯誤消息,指出該方法不存在。 ,如果我嘗試使用respond_to?編寫測試respond_to? 而不是respond_to ,測試不會運行。

有人可以解釋一下兩者之間的區別,為什么測試僅使用respond_to運行?

紅寶石請客? ! 作為方法名稱中的實際字符。 respond_torespond_to? 是不同的。 ? 表示這應該以對或錯響應(按照慣例;這不是必需的)。 特別:

respond_to? 是用於檢測類是否具有特定方法的Ruby方法 例如,

@user.respond_to?('eat_food')

如果User類上具有eat_food方法,則將返回true。

respond_to是用於響應特定請求類型的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。

該測試使用方便的助手來使用戶更加友好。

Ruby是Ruby,因此使用好的舊版respond_to? 如果以這種方式調用它將起作用:

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

控制器中還有另一個respond_to ,但與您已經遇到的那些無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM