【问题标题】:Rails object returns false on present? but true on !nil?Rails 对象当前返回 false?但在 !nil 上是真的?
【发布时间】:2014-06-06 19:57:26
【问题描述】:

我在活动记录中有一个数据库对象。如果我调用object.find(1).present?,它会返回false,但它存在。调用!object.find(1).nil? 返回true

这是为什么?我以为!nil == present?

【问题讨论】:

  • present? == !blank?
  • 只需向我们展示代码,您正在玩​​。只需在 Rails 控制台中运行这些代码,然后复制并粘贴代码的相关部分..

标签: ruby-on-rails ruby activerecord


【解决方案1】:

nil?present?相反的。

很多东西都不是present?不是nil?,比如空字符串或空数组。

"".present? # => false
"".nil? # => false

[].present? # => false
[].nil? # => false

【讨论】:

    【解决方案2】:

    为了更好地回答您的问题,让我们看看实现:

    def present?
      !blank?
    end
    

    我们没有看到这里提到的nil?,只是blank?,所以我们也来看看blank?

    def blank?
      respond_to?(:empty?) ? !!empty? : !self
    end
    

    所以本质上,如果对象 responds_to empty? 它会调用它以获得结果。具有empty? 方法的对象包括Array、Hash、String 和Set。

    进一步阅读

    【讨论】:

    • 最好指出,在 String 的情况下,blank?empty? 的不同之处在于,所有空格的字符串都是空白的,但不是空的。
    猜你喜欢
    • 2015-11-11
    • 2016-02-13
    • 2013-04-21
    • 1970-01-01
    • 2016-04-16
    • 1970-01-01
    • 2018-09-28
    • 1970-01-01
    • 2011-06-26
    相关资源
    最近更新 更多