2012-03-23 2 views
2

Что такое аналоговый в datamapper для .present? метод?password.present? аналоговый Datamapper

У меня есть код с рельсов приложения зва тусклого т повторно использовать этот Синатр

например:

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 

в модели I Аву перед сохранением обратного

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

Спасибо! Я новичок в синатра и плохой опыт разработки в рубине. Это работает, но я боялся, что пароль будет «», я обойду это с помощью валидаций – user1136228

+0

, если вы уверены, что получите строку, которую вы также можете использовать 'if password.empty?' –

Смежные вопросы