为什么rails在被调用ID中有'错误地为4'的nil错误?

时间:2013-12-02 19:57:02

标签: ruby-on-rails ruby

当您使用nil ID调用find时,或者当您尝试访问不存在的关系对象时,会抛出此错误:

Called id for nil, which would mistakenly be 4 -- if you really wanted the id of nil, use object_id

什么是“哪个会错误地为4”?对于99.9%的人们遇到的无ID错误,这似乎很奇怪/无关紧要。它是旧时代虫子的延续吗?为什么会在那里?

2 个答案:

答案 0 :(得分:2)

来自ActiveSupport的NilClass扩展程序:

  Ruby 1.8中存在

#id(虽然它已被弃用)。由于id是Active Record模型的基本方法,#id也被重新定义   提出RuntimeError并警告用户。她可能想要一个模特   数据库标识符和原始方法返回的4可以   导致晦涩的错误。

     

标志config.whiny_nils确定是否启用此功能。   默认情况下,它处于开发和测试模式,并且处于关闭状态   生产模式。

答案 1 :(得分:0)

根据In Ruby why does nil.id return 4? - 在<{1}}上调用.id时,Ruby 使用返回4;因此,当试图通过nil查找时,Rails会抛出错误消息,指出如果您尝试使用nil致电.find,则会找到nil。< / p>