1
0

findとfind_byの違い

Posted at

はじめに

findfind_byは、Railsでデータベースからレコードを取得するためのメソッドですが、いくつかの違いがあります。
findとfind_byの違いについて理解が曖昧だったため備忘録も兼ねてまとめます。

検索条件の指定方法

find: 主キー(通常はid)を指定してレコードを取得します。例えば、User.find(1)idが1であるユーザーを取得します。

find_by: 様々な条件を指定して検索できます。例えば、User.find_by(name: 'John')nameがJohnであるユーザーを取得します。

# 主キーを指定して取得
user = User.find(1)

# 条件を指定して取得
user_by_name = User.find_by(name: 'John')

エラーハンドリング

find: 主キーが見つからなかった場合、ActiveRecord::RecordNotFound例外が発生します。主キーが存在しない場合、エラーが発生するため注意が必要です。

find_by: 該当するレコードが見つからなかった場合、nilを返します。そのためエラーが発生することはありません。

# 主キーが見つからない場合の例外処理
begin
  user = User.find(100)
rescue ActiveRecord::RecordNotFound
  puts "User not found!"
end

# find_byではnilを返すため、エラーハンドリングが不要
user_by_name = User.find_by(name: 'Nonexistent')
puts user_by_name.nil? # true

取得されるオブジェクトの型

find: 単一の主キーに対応するレコードが見つかれば、単一のレコードを返します。

find_by: 条件に合致する最初のレコードを返します。該当するレコードがなければnilを返します。

# 単一の主キーに対応するレコードを取得
user = User.find(1)

# 最初の条件に合致するレコードを取得
user_by_name = User.find_by(name: 'John')

まとめ

どちらを使用するかは、具体的な使用ケースやエラーハンドリングの方針によります。通常、主キーを使用して特定のレコードを取得する場合はfind、特定の条件で検索する場合はfind_byを使用します。

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