【问题标题】:Nil vs RecordNotFound for a failed queryNil vs RecordNotFound 查询失败
【发布时间】:2013-04-14 17:10:36
【问题描述】:

当我这样做时

User.find_by_username('some_user')

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

User.find(1)

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

【问题讨论】:

  • 为了一致性,使用 find_by_id

标签: sql ruby-on-rails ruby-on-rails-3 activerecord


【解决方案1】:

ActiveRecord::RecordNotFound 仅在未找到具有给定 ID 的记录时引发。

如果不希望通过id搜索时出现异常,可以使用:

User.find_by_id('foo')

对我来说不同的是:

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

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

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

【讨论】:

    猜你喜欢
    • 2011-02-27
    • 2016-01-06
    • 2012-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多