1

私がする時

User.find_by_username('some_user')

上記のクエリは nil を返します。でも、

User.find(1)

ユーザーが見つからない場合は、ActiveRecord::RecordNotFound エラーをスローします。Railsガイドは、これが起こるはずだと言っていますが、その理由は説明していません. それが私の質問です。なぜ 2 つの異なる動作があるのですか? ありがとう!

4

1 に答える 1

2

ActiveRecord::RecordNotFound は、指定された ID を持つレコードが見つからない場合にのみ発生します。

ID で検索するときに例外が必要ない場合は、次を使用できます。

User.find_by_id('foo')

私との違いは次のとおりです。

  1. User.find: そのユーザーを取得します。
  2. User.find_by_foo('foo'): foo == foo のユーザーはいますか?

最初の (1) はレコードの存在を前提としているため、失敗すると例外が発生します。

2 番目の (2) は、レコードの存在を照会することを前提としているため、欠落しているレコードの結果は nil になります。

于 2013-04-21T21:23:09.913 に答える