0
0

findとfind_byの使い分けについて

Posted at

前提

内容は浅いですが、個人学習中の備忘録を目的として残しておきます。

モデル.find

  User.find(1)

findメソッドで取得する値は、DBに存在している前提で実行されるため、値が存在しない場合は、ActiveRecord::RecordNotFoundという例外が発生する。

用途

必ず該当する値が存在しなくてはいけないモデルに対して使う。
万が一、存在しない場合は例外が発生するため、例外処理も実装しておく必要がある。

モデル.find_by

  User.find_by(email: 'example@aaa.com')

find_byメソッドは、該当する最初の値が取得されるが、値が存在しない場合は例外を発生させずnilを返す

用途

あらかじめ、値が存在しないケースがあると判断できている場合に使う。

find_byとwhereについて

User.find_by(email: 'example@aaa.com')
User.where(email: 'example@aaa.com')

上記の例は、アドレスのようにアプリ上で一意な値を取得したい場合、find_byメソッドの方を使うことが有効的。
whereメソッドを使うと、全てのデータを見て該当する値を全取得するメソッドのため、無駄な処理を走らせてしまうので、一意な値を取得する場合などは、最初に該当する値を見つけた時点で処理が終了するfind_byメソッドを使うことがよさそう。

0
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
0
0