2012-08-25 102 views
1

我正在學習Rails,我正在研究一個非常基本的RSVP應用程序,如果用戶輸入了名稱和電子郵件地址,我的用戶模型中名爲rsvp?的方法返回trueattribute.present有什麼區別?和屬性?

如果我的方法被定義爲:

def rsvp? 
    name.present? && email.present? 
end 

我得到相同的結果,如果它是:

def rsvp? 
    name? && email? 
end 

所以說name.present?一樣name?有人告訴我,name.present?不會僅檢查nil值,但也檢查空字符串值。但現在看來,name?完成同樣的事情(測試的名稱&電子郵件,名稱,但沒有電子郵件等所有四個排列)

回答

4

present?返回blank?相反。它們是Ruby核心Object的Rails擴展。 .present?將返回false如果值是測試是nil""{}false[],等...基於類型ArrayHashString等...)延伸Object。像name?

方法是基於模型像:name的屬性通過在ActiveRecord::AttributeMethodsmethod_missing方法,然後由ActiveModel::AttributeMethods處理,並最終由this class處理實際傳遞。

所以,他們大多是相同(對某些列類型blank?實際上是調用;在上述present?相同blank?,但他們沒有相同,爲?後綴的方法做一些根據列類型進行額外的檢查。

+0

真棒,謝謝你。 – drew879

相關問題