是!object.nil?== object.present?在Rails?

dee*_*dee 7 ruby ruby-on-rails

可以安全地假设!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
Run Code Online (Sandbox Code Playgroud)

zea*_*soi 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
Run Code Online (Sandbox Code Playgroud)