5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【初心者向け】find と find_by の使い分け

Posted at

はじめに

find と find_by は、どちらもRailsでレコードを取得するためのメソッドで似ていますが、少々動作や使い方に違いがあります。
それぞれ解説していきます!

find

概要

プライマリキー(通常は id カラム)を指定して、1つのレコードを取得します。

エラーハンドリング

指定した id に該当するレコードが見つからない場合は、ActiveRecord::RecordNotFound 例外が発生します。

使い方

user = User.find(1)

User.find(1) は、 id が 1 のユーザーを取得します。
idが1のユーザーが存在しない場合、ActiveRecord::RecordNotFound例外エラーが発生します。

find_by

概要

任意のカラムに基づいて条件を指定し、最初に一致するレコードを取得します。

エラーハンドリング

指定した条件に一致するレコードが見つからない場合は、nil を返します(例外は発生しません)。

使い方

user = User.find_by(name: "Alice")

User.find_by(name: "Alice") は、name が "Alice" の最初のユーザーを取得します。
一致するユーザーが存在しない場合、userはnilになります。

違いのまとめ

find

使用目的: 主キーで1件のレコードを取得
レコードが見つからない場合: ActiveRecord::RecordNotFound の例外発生
戻り値: 1件のレコード
使い分け: 必ず存在する id を使ってレコードを取得したいときに便利です。レコードが存在しないとエラーが発生するため、エラーハンドリングも明確に行いたい場合に適しています。

find_by

使用目的: 任意のカラムに基づいてレコードを取得
レコードが見つからない場合: nil を返す
戻り値: 最初に一致した1件のレコード
使い分け: 特定の条件に合致する最初のレコードを取得したいときや、レコードが存在しない場合に nil が返されても問題ない場合に便利です。

5
3
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
5
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?