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