LoginSignup
4
5

More than 1 year has passed since last update.

【覚悟】find, find_by, whereの違い【備忘録】

Posted at

find, find_by, whereの違い

この前足元をすくわれたので、もう間違えないという覚悟の備忘録。
基礎的な内容だからこそ今一度。

findメソッド

モデルのidで検索してデータを取得できる。
idでしか検索ができないため、取得対象のデータのidが具体的にわかっている場面で使用する。

該当するデータが存在しない場合は、ActiveRecord::RecordNotFoundが返ってくる。

find_byメソッド

モデルのid以外でも検索条件としてデータを取得できる。
複数条件を指定できるが、返ってくるデータは最初にヒットした1件のみ

該当するデータがない場合は、nilが返ってくる。

whereメソッド

モデルのid以外でも検索条件としてデータを取得できる。
該当するデータが全て返ってくる。

該当するデータがない場合は、空の配列が返ってくる。

注意

whereはActiveRecord::Relationを返す。これは検索クエリを組み立てるもので、find, find_byの返す検索結果のオブジェクトとは異なる。

一覧表

id以外の検索 返ってくるレコード数 該当レコードが存在しない場合
find え!!id以外で検索を!? (不可) 1 エラー
find_by 出来らあっ! 1 nil
where 出来らあっ! 複数 空の配列

参考

find、find_by、whereの違い

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