2012-03-23 15 views
2

.presentのdatamapperのアナログとは何ですか?方法?password.present?アナログDatamapper

私はレールからのコードは、dは、APP持っ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のように拡張することもできます。オブジェクトが空でないかどうかをチェックします。方法blank?は、オブジェクトがempty?に応答するかどうかをチェックします。これは主に文字列用です。オブジェクトがempty?に応答しない場合、このメソッドは単に!selfを返します。だからpresent?は単にselfを返します。したがって、あなたはまた、第2の方法はないのに対し、それは、現在のように空の文字列を扱わないことを、

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

ありがとうございます! 私はシナトラに慣れていないし、ルビーでの開発経験も乏しい。 それは動作しますが、私はそれが「」にパスワードを聞かせます恐れていた、あなたはまた、password.emptyない限り、 '使用することができます文字列を取得することを確認している場合、私は検証 – user1136228

+0

とその周りに行きます?' –