📘
【Rails】findとfind_by
応用課題を進めている過程で、findとfind_byの違いがはっきりとわかっていなかったので軽く復習したいと思います。
findメソッド
findメソッドは、主に主キー(id)を基にレコードを検索するためのメソッドです。
特徴
- idを指定して見つかった1件を返す
- id以外での条件の検索は不可能
- データを複数取得が可能
- 検索結果が出ない場合は例外を発生させて処理を中断
ActiveRecord::RecordNotFoundエラー
記述例
モデル名.find(主キー)
例:id=1のみ取得したい場合(モデルはListの場合)
List.find(1)
例:URLのidを取得したい場合
List.find(params[:id])
find_byメソッド
find_byメソッドは、指定したカラムの値に基づいて1つのレコードを取得するために使用する。主キー以外のカラムを検索条件に指定できる。
特徴
- id以外のカラムを指定しても見つかった1件を返す
- id以外の条件でも検索可能
- 複数のレコードがヒットしても一番最初に見つかったレコード1件を取得する
- 該当データが見つからない場合は
nilが返ってくる
記述例
モデル名.find_by(任意のカラム名: 格納されている値)
例:titleカラムに「ruby」で投稿されたレコードを取得したい場合(モデルがListの前提)
List.find_by(title:"ruby")
例:bodyカラムに「rails」で投稿されたレコードを取得したい場合
List.find_by(body:"rails")
例:上記複数のカラムを指定して取得する場合
List.find_by(title:"ruby",body:"rails")
まとめ
| メソッド | 特徴 | 該当データがない場合 |
|---|---|---|
| find | idを指定して見つかった1件を返す | ActiveRecord::RecordNotFound |
| find_by | 一番最初に見つかったレコード1件を取得 | nul |
上記がざっくりとしたfindとfind_byの特徴となります。
参考
Discussion