1

当我做

User.find_by_username('some_user')

并且找不到用户,上面的查询返回 nil。然而,

User.find(1)

如果找不到用户,则抛出 ActiveRecord::RecordNotFound 错误。rails guide说这应该发生,但没有解释原因。这是我的问题,为什么会有两种不同的行为?谢谢!

4

1 回答 1

2

ActiveRecord::RecordNotFound 仅在未找到具有给定 id(s) 的记录时引发。

如果您在按 id 搜索时不希望出现异常,可以使用:

User.find_by_id('foo')

对我来说不同的是:

  1. User.find:给我那个用户。
  2. User.find_by_foo('foo'): 有没有 foo == foo 的用户?

第一个 (1) 假设您的记录存在,因此失败应该引发异常。

第二个 (2) 假设您要查询您的记录是否存在,因此缺少记录结果为零。

于 2013-04-21T21:23:09.913 回答