1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】レコードが見つからない場合におけるfindとfind_byの挙動の違い

Posted at

はじめに

Railsのfindメソッドとfind_byメソッドはレコードが見つからない時の挙動が異なります。

どっちがどっちだったかいつも忘れるため、備忘録としてまとめます。

レコードが見つからない場合におけるfindとfind_byの挙動の違い

レコードが見つからない場合の両者の挙動は次のとおりです。

  • findメソッド:ActiveRecord::RecordNotFoundエラーを返す
  • find_byメソッド:nilを返す

実際の挙動を確認

実際の挙動を確認して終わります。

findメソッド(ActiveRecord::RecordNotFoundエラーが発生)

sample-app> Book.find(99999999)
  Book Load (0.6ms)  SELECT "books".* FROM "books" WHERE "books"."id" = ? LIMIT ?  [["id", 99999999], ["LIMIT", 1]]
/opt/homebrew/lib/ruby/gems/3.3.0/gems/irb-1.14.0/lib/irb.rb:1285:in `full_message': Couldn't find Book with 'id'=99999999 (ActiveRecord::RecordNotFound)

find_byメソッド(nil を返す)

sample-app> Book.find_by(id: 99999999)
  Book Load (0.4ms)  SELECT "books".* FROM "books" WHERE "books"."id" = ? LIMIT ?  [["id", 99999999], ["LIMIT", 1]]
=> nil

おわりに

完全に記憶に定着するまで、何度でもアウトプットしていきます。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?