password.present?模拟Datamapper

时间:2012-03-23 09:26:04

标签: sinatra datamapper

.present的datamapper中的模拟是什么?方法

我有来自rails app的代码以及重用它是Sinatra

例如:

  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 个答案:

答案 0 :(得分:1)

ActiveSupport中的present?方法定义如下:

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?方法的唯一优点是,它不会将空字符串视为存在,而第二种方法则存在。