Rails对象在当前返回false?但是真的!没有?

时间:2014-06-06 19:57:26

标签: ruby-on-rails ruby activerecord

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

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

2 个答案:

答案 0 :(得分:4)

nil?present? 不是对立面。

许多内容都是 present? 而不是nil?,例如空字符串或空数组。

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

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

答案 1 :(得分:4)

为了更好地回答您的问题,请查看实施:

def present?
  !blank?
end

我们在此处未看到nil?,只是blank?,所以我们也可以查看blank?

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

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

进一步阅读