Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 什么';“是什么引起的?”;命名错误:未定义的方法`包括?&x27;对于nil:NilClass“;_Ruby On Rails_Ruby_Model_Methods_Undefined - Fatal编程技术网

Ruby on rails 什么';“是什么引起的?”;命名错误:未定义的方法`包括?&x27;对于nil:NilClass“;

Ruby on rails 什么';“是什么引起的?”;命名错误:未定义的方法`包括?&x27;对于nil:NilClass“;,ruby-on-rails,ruby,model,methods,undefined,Ruby On Rails,Ruby,Model,Methods,Undefined,我的Rails应用程序中有一个Book模型,具有各种属性(即Book db表中的列)。这些属性之一是“排名” 最近,may app已开始为以下代码为nil:NilClass抛出NoMethodError:undefined方法“include”: def some_method(book, another_arg) return book.ranking unless book.ranking.blank? ... end 然而,这并不一致。在绝大多数情况下,访问book.rankin

我的Rails应用程序中有一个Book模型,具有各种属性(即Book db表中的列)。这些属性之一是“排名”

最近,may app已开始为以下代码为nil:NilClass抛出
NoMethodError:undefined方法“include”:

def some_method(book, another_arg)
  return book.ranking unless book.ranking.blank?
  ...
end
然而,这并不一致。在绝大多数情况下,访问book.ranking是有效的——可能有2-4%的时间会抛出错误。如果我将代码改为
book[:ranking]
book['ranking']
而不是
book.ranking
,它会100%工作

有什么想法吗


另外,这个问题在其他模型和属性中间歇性出现。。。不仅仅是Book和ranking属性。

Book对象是nil,而不是ranking。所以

return book.ranking unless book.nil?

应该解决问题。

您应该检查book是否为nil

return book.ranking unless book.blank? and book.ranking.blank?

我会在这里使用
试试

book.try(:ranking)

如果
book
ranking
nil
,则将返回
nil

您也可以这样做:

return book.ranking unless book and book.ranking
或使用
AND和
gem:

return book.ranking unless book.andand.ranking

有几种方法可以防止nil呼叫:

如果出现以下情况,请使用检查:

return book.ranking if book
return book && book.ranking
使用&&/和

return book.ranking if book
return book && book.ranking
使用试试(在Ruby 1.9或Rails/ActiveSupport中):


如果是这样的话,对于nil:NilClass`,错误不应该是
NoMethodError:undefined method
ranking'?很好,我想我错了。我在看,方法_missing(在调用排名方法时调用)似乎调用include?在@attributes上。也许出于某种原因,这是nil?我遇到了这个问题:这与对象为nil无关,正如许多人在这个线程中所说的,但是rails内部出了问题。“问题id”导致了一个0.include?错误,但“问题[:id]”工作正常。我认为这是Rob建议的带有@attributes的东西,但我无法确定。将“question.attributes”输出到记录器似乎会返回完全正常的结果。在重新加载应用程序后,我有时会在控制台中遇到这种情况。我曾经知道它是从哪里来的,但我忘了。在rails代码的深处。我想可能和mysql接口有关,你用的是mysql吗?我用的是PostgreSQL,我的应用程序运行在Heroku上。当我远程登录Heroku的控制台时,这个错误会一直弹出(但在我的本地控制台上从来没有出现过)。我知道这已经很旧了,但我已经升级了,因为我看到了与检查
.nil?
而不是
.blank?
的方法相关的相同错误。它不会持续发生,第二次运行相同的代码或页面刷新似乎总是返回到预期的行为。这只是在我将开发环境从SQLite3切换到MySQL以更接近生产环境时才开始发生的,因此我倾向于同意@mckeed.try works,但它不在Ruby 1.8中。。。您必须使用主动支持才能在1中获得它。8@severin:鉴于这是一个Rails问题,我假设他们已经使用了主动支持。