可能的复制品: Find (1)在 id 1不存在时给出 ActiveRecord 错误
如果数据库中没有 id 为1的用户,则尝试 User.find(1)将引发异常。
User.find(1)
为什么会这样?
因为这是架构师打算找到(id)的工作方式,如 RDoc 所示:
通过 id 查找-这可以是特定的 id (1)、 id 列表(1、5、6)或 id 数组([5、6、10])。如果没有找到所有列出的 id 的记录,那么 RecordNotfound 将被引发。
如果不希望引发异常,请使用 find _ by _ id,如果找不到具有指定 id 的对象,则返回 nil。你的例子就是 User.find_by_id(1)。
User.find_by_id(1)
根据 runako 的解释,选择是否引发异常实际上是非常有用的。我正在开发一个博客应用程序,我想添加对查看下一个或上一个博客条目的支持。我能够添加两个实例方法到我的 Post模型,只返回 nil当您尝试获取上一篇文章时,查看第一篇文章,或下一篇文章时,查看最后一篇文章:
Post
nil
def next Post.find_by_id(id + 1) end def previous Post.find_by_id(id - 1) end
这样可以避免帮助程序代码有条件地生成上一个 Post/Next Post 链接,从而避免必须处理 RecordNotFound异常,这样做会很糟糕,因为它将使用控制流异常。
RecordNotFound