【问题标题】:Ruby's nil? function not working鲁比零?功能不工作
【发布时间】:2013-07-20 19:47:55
【问题描述】:

我使用的是 Ruby 1.9.3。

这就是控制台中发生的事情:

1.9.3-p392 :028 > p = Product.find(1)
  Product Load (0.4ms)  SELECT `products`.* FROM `products` WHERE `products`.`id` = 1 LIMIT 1
 => #<Product id: 1, name: "Product 4", image: nil, available: true> 
1.9.3-p392 :029 > p.image
 =>  
1.9.3-p392 :030 > p.image.nil?
 => false

当产品被退回时,图像显然是 nil,但是当我尝试获取值 (p.image) 时,它没有显示任何内容。

为什么p.image.nil? 命令没有返回true

【问题讨论】:

  • 使用p.image.equal? nil时会发生什么(检查前提)? p.image.method(:nil?) 返回什么(检查废话覆盖)?
  • 虽然@Reza 的回答在这种情况下是一种有效的解决方法,但它并没有解释为什么会发生这种情况。将来,有关您的模型的问题应至少包括模型代码的相关部分。

标签: ruby-on-rails ruby


【解决方案1】:

使用.blank?,如果属性是nilempty,它将返回true

【讨论】:

  • 好奇的是上一行:#&lt;Product id: 1, name: "Product 4", image: *nil*, available: true&gt;。也许图像中有魔力?
  • p.image 应该返回 =&gt; nil,但它没有。所以我认为代码可能被覆盖,因此它返回一个空字符串或一个空格(` `)。
  • 当我使用 phpMyAdmin 查看数据库本身时,该特定产品的图像为 NULL。在此过程中,我找不到任何可能使图像不为 NULL/nil 的东西。无论如何,.blank?方法有效,但我真的不明白为什么。
  • 运行p.image.object_id如果它给你=&gt; 4这意味着它是零,但如果它可能不在代码中的某个地方,或者php本身,它会将image更改为空字符串
  • 明确一点,#blank?由 ActiveSupport 提供,不是原生 ruby​​ api。
猜你喜欢
  • 1970-01-01
  • 2022-11-04
  • 2014-12-13
  • 1970-01-01
  • 2017-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多