📘

【Rails】findとfind_by

2023/10/08に公開

応用課題を進めている過程で、findfind_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

上記がざっくりとしたfindfind_byの特徴となります。

参考

https://qiita.com/ken_3737/items/c39c520e6d63d377dda3
https://zenn.dev/ganmo3/articles/70102aad10710e
https://zenn.dev/mame39/articles/534dbb39cfccb3

Discussion