我在活动记录中有一个数据库对象。如果我致电object.find(1).present?
,则会返回false
,但它仍然存在。致电!object.find(1).nil?
会返回true
。
这是为什么?我想!nil == present?
。
答案 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。
进一步阅读