私がする時
User.find_by_username('some_user')
上記のクエリは nil を返します。でも、
User.find(1)
ユーザーが見つからない場合は、ActiveRecord::RecordNotFound エラーをスローします。Railsガイドは、これが起こるはずだと言っていますが、その理由は説明していません. それが私の質問です。なぜ 2 つの異なる動作があるのですか? ありがとう!
私がする時
User.find_by_username('some_user')
上記のクエリは nil を返します。でも、
User.find(1)
ユーザーが見つからない場合は、ActiveRecord::RecordNotFound エラーをスローします。Railsガイドは、これが起こるはずだと言っていますが、その理由は説明していません. それが私の質問です。なぜ 2 つの異なる動作があるのですか? ありがとう!
ActiveRecord::RecordNotFound は、指定された ID を持つレコードが見つからない場合にのみ発生します。
ID で検索するときに例外が必要ない場合は、次を使用できます。
User.find_by_id('foo')
私との違いは次のとおりです。
最初の (1) はレコードの存在を前提としているため、失敗すると例外が発生します。
2 番目の (2) は、レコードの存在を照会することを前提としているため、欠落しているレコードの結果は nil になります。