7

假设!object.nil? == object.present?在 Rails 中是安全的,还是有陷阱?这是一个场景:

  def signed_in?
    !current_user.nil? # Would current_user.present? mean the same thing here?
  end

  def sign_in(user)
    cookies[:token] = user.token
    self.current_user = user
  end

  def current_user
    @current_user ||= User.find_by(token: cookies[:token]) if cookies[:token]
  end
4

2 回答 2

9

.present?是 的否定.blank?,它与 相似但绝对是独一无二的.nil?

.nil?仅评估对象是否为NilClass.

.blank?在评估true非空且可能(或可能不)包含空格的字符串时评估为。

这对您的问题来说是多余的,但注意它可能很方便,.blank?并且.present?是 Rails 方法,而是.nil?纯 Ruby。

编辑:

如果在您的示例object中等于false,那么不,假设 . 是不安全的!object.nil? == object.present?。但是,如果object它实际上是一个 Ruby/Rails 对象,那么可以安全地假设该语句将评估为 true。

!false.nil? == false.present? #=> false
于 2013-06-12T13:39:31.707 回答
3

根据此处的文档,在 Rails 中,我通常不这么认为。

但以下应该是真的

!object.blank? == object.present?

在您的情况下,我认为这应该是正确的,因为该方法current_user是如何定义的。

于 2013-06-12T13:37:36.867 回答