【发布时间】:2011-02-05 08:01:55
【问题描述】:
我的 Rails 应用程序中有一个 Book 模型,具有各种属性(也就是 book db 表中的列)。这些属性之一是“排名”。
最近may app已经开始抛出NoMethodError: undefined method 'include?' for nil:NilClass以下代码:
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 和排名属性。
【问题讨论】:
-
在重新加载应用程序后有时会在控制台中发生这种情况。我曾经弄清楚它来自哪里,但我忘记了。在 Rails 代码深处的某个地方。我想可能和mysql接口有关,你用的是mysql吗?
-
我正在使用 PostgreSQL,我的应用在 Heroku 上运行。当我远程登录 Heroku 的控制台时,这个错误一直弹出(但从不在我的本地控制台上)。
-
我知道这现在真的很老了,但我赞成,因为我看到与检查
.nil?而不是.blank?的方法有关的相同错误。它不会始终如一地发生,并且相同代码的第二次运行或页面刷新似乎总是返回到预期的行为。这只是在我将开发环境从 SQLite3 切换到 MySQL 以更接近地模仿生产环境时才开始发生的,所以我倾向于同意@mckeed。
标签: ruby-on-rails ruby model methods undefined