2012-03-23 1 views
2

.present에 대한 datamapper의 아날로그는 무엇입니까? 방법?password.present? 아날로그 Datamapper

나는 레일에서 코드가 D가되는 앱이 t 그것이시나

입니다 재사용 완

예 :

모델
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 

내가 전에 콜백

before :save, :encrypt_password 

답변

1

present? 방법에 저장 AVE 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도 이와 같이 확장 할 수 있습니다. 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에 익숙하지 않고 루비 개발에 대한 경험이 부족합니다. 작동하지만 암호가 ""될 수있는 것이 두려웠습니다. 유효성 검사로 – user1136228

+0

으로 돌아가서 확실한 문자열을 얻을 수 있다면'password.empty '가 아닌 한 사용할 수도 있습니다. –