Ruby on rails Rails对象在存在时返回false?但这是真的!无

Ruby on rails Rails对象在存在时返回false?但这是真的!无,ruby-on-rails,ruby,activerecord,Ruby On Rails,Ruby,Activerecord,我在活动记录中有一个数据库对象。如果我调用object.find(1).present?它返回false,但它存在。呼叫!object.find(1).nil?返回true 为什么会这样?我想!nil==present?nil?和present?是而不是对立面 许多内容既不存在,也不存在,例如空字符串或空数组 "".present? # => false "".nil? # => false [].present? # => false [].nil? # => fal

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


为什么会这样?我想
!nil==present?

nil?
present?
而不是对立面

许多内容既不存在,也不存在,例如空字符串或空数组

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

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

nil?
present?
而不是相反

许多内容既不存在,也不存在,例如空字符串或空数组

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

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

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

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

def blank?
  respond_to?(:empty?) ? !!empty? : !self
end
因此,本质上,如果对象
响应
为空?
它将调用该对象以获得结果。具有
empty?
方法的对象包括数组、哈希、字符串和集合

进一步阅读


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

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

def blank?
  respond_to?(:empty?) ? !!empty? : !self
end
因此,本质上,如果对象
响应
为空?
它将调用该对象以获得结果。具有
empty?
方法的对象包括数组、哈希、字符串和集合

进一步阅读


是否存在?==!空白?
只需向我们显示您正在使用的代码即可。只需在Rails控制台中运行这些代码,复制并粘贴代码的相关部分。
present?==!空白?
只需向我们显示您正在使用的代码即可。只需在Rails控制台中运行这些代码,并复制和粘贴代码的相关部分。。