为nil定义方法'each':NilClass

时间:2015-04-17 10:28:41

标签: ruby-on-rails ruby

undefined method 'each' for nil:NilClass

好的,我知道有数百个问题在讨论这个问题 我知道这个错误信息意味着什么,我知道如何处理它。

我的问题是:有没有办法强制nil类返回一个空数组? 我的第二个问题:它会安全吗?

感谢
的Sebastien

3 个答案:

答案 0 :(得分:2)

1)当然,您可以修补 nil (Ruby线程中始终只有一个 nil 对象,因此您可以修补它,而不是NilClass):< / p>

def nil.each
  puts 'Hey'
end

nil.each #outputs 'hey'

2)但是你应该从不做那样的事情,因为它可能会破坏许多库中的很多东西,甚至在Ruby本身。

答案 1 :(得分:0)

如果您使用@products之类的内容,请尝试使用三元运算符

@products = @products.present? ? @products : []

是的,如果您使用空的正确处理它并且在继续操作或保存之前检查所需的相关值是安全的

答案 2 :(得分:0)

您可以修改您打电话给每个人的班级:

class SomeItem
  def each(&block)
    [] unless super(&block)
  end
end

或直接补丁可枚举,但我对这种方式触及核心类很谨慎。