假设!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
解决方法
.当下?是.blank?的否定,它与.nil?相似但绝对独特.
.零?仅评估对象是否为NilClass.
.空白?在评估非空字符串并且可能(或可能不)包含空格时,求值为true.
这对你的问题来说是多余的,但是注意到.blank可能很方便吗?和.present?是Rails方法,而.nil?是纯粹的Ruby.
编辑:
如果,在你的例子中,object等于false,那么不,假设!object.nil是不安全的? == object.present?.但是,如果object实际上是一个Ruby / Rails对象,那么可以安全地假设该语句将评估为true.
- !false.nil? == false.present? #=> false