両者の違い
find
-検索条件として指定できるのは『id』のみ
-データを複数取得できる
-検索結果が無い場合は例外を発生させて処理を中断
find_by
-検索時に複数の条件を指定できる。また、『id』以外ののカラムでも検索できる
-取得できるデータは最初にマッチした1件のみ
-検索結果が無い場合nilを返すため処理を中断されない
使い方(find)
基本形はモデル名にfindを繋げて引数を指定。
それによって該当するモデルのテーブルからデータを検索できる。
モデル名.find(引数)
指定できる引数は
『数値型』、『文字列の数字』、『数字のリスト』、『数字の配列』
該当する『id』のデータが見つからない場合は**例外(RecordNotFound)**が発生する
【例】Userモデルからidが1のデータを返す
User.find(1)
【例】Userモデルからidが1,3,5のデータを配列で返す
User.find(1, 3, 5)
使い方(find_by)
モデル名に引数を繋げて条件を1つ以上指定する。
検索できる条件は『カラム名』、『検索条件』
データが見つからない場合nilを返す。
【例】Userモデルからnameカラムが"佐藤"とマッチした最初のデータを取得
User.find_by(name: "佐藤")
【例】Userモデルからnameカラムが"佐藤"で且つadminカラム(管理者)がtrueの最初のデータを取得
User.find_by(name: "佐藤", admin: true)
【例】Userテーブルから作成日が1週間以内のデータを1件取得
User.find_by("created_at > ?", 1.weeks.ago)