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 | 出来らあっ! | 複数 | 空の配列 |