2012-03-23 31 views
2

什麼是.present的datamapper中的模擬?方法?password.present?模擬Datamapper

我有軌程式的d婉噸至重用它是西納特拉

例如:

def encrypt_password 
    if password.present? 
     self.password_salt = BCrypt::Engine.generate_salt 
     self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
    end 
    end 

模型我AVE之前保存回調

before :save, :encrypt_password 

回答

1

present?方法ActiveSupport定義如下:

class Object 
    def present? 
     !blank? 
    end 

    def blank? 
     respond_to?(:empty?) ? empty? : !self 
    end 
end 

(來源:http://api.rubyonrails.org/classes/Object.html#method-i-present-3F

您也可以這樣擴展Object。它檢查對象是否不是空白。方法blank?本身檢查對象是否響應empty?。這主要是爲了字符串。如果對象不響應empty?,則該方法僅返回!self。所以present?只會返回self。因此你也可以寫你的代碼

def encrypt_password 
    if password 
     self.password_salt = BCrypt::Engine.generate_salt 
     self.password_hash = BCrypt::Engine.hash_secret(password, password_salt) 
    end 
    end 

present?方法的唯一好處是,它不會把一個空字符串爲存在,而第二種方法一樣。

+0

謝謝! 我是新來的sinatra和紅寶石開發不佳的經驗。 它的工作原理,但我擔心它會讓密碼爲「」,如果你肯定會得到一個字符串,你也可以使用'除非password.empty?'我繞着驗證碼 – user1136228 2012-03-23 15:47:29

+0

? – 2012-03-25 12:29:34