Метод 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?
состоит в том, что он не обрабатывает пустую строку как существующую, тогда как второй метод делает.