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