find -「データベースから検索」-
モデル.find(引数)
・引数にはIDのみが入りうる。
・返り値として、指定したモデルの中の引数に合致したインスタンスを出す。
・取得したいデータのIDがわかっているとき使用できる。
・引数のところに配列が入ることで、複数のIDを指定してデータベースから複数のデータを引き出すことができる。
例1
Book.find(3)
Bookモデルの中からIDが3のデータを取得する。
例2
Book.find([2,4])
Bookモデルの中からIDが2,4のデータを配列で返す。
find_by -検索条件を指定して(IDではなくてもよい)最初の1件を取得-
モデル.find_by(条件)
・条件に当てはまるモデルを検索する。
・条件はID以外のカラムを用いて指定することができる。
・返り値として、指定したモデルの条件に合致するインスタンスを出す。複数合致した場合はそれらの中の一番最初のものを返り値とする。
・1件だけインスタンスを取得するときにのみ使用できる。
例1
Book.find_by(author: Edogawa)
==>Nisendouka
Bookモデル全体から、authorがEdogawaであるインスタンスのうち最初の1件を返す。
例2
Book.find_by(author: Edogawa, Published: 1951)
==>Geneijo
Bookモデル全体から、authorがEdogawaであり、Publishedが1951であるインスタンスのうち最初の1件を返す。
where -検索条件を指定して(IDではなくてもよい)該当するデータ全て取得-
モデル.where(条件)
・条件に当てはまるインスタンスを検索する。
・該当するデータ全てを取得する。しかし、戻り値は配列ではなく、ActiveRecord::Relationというオブジェクトとなる。インスタンスではないため、.where
で取得したデータをそのまま使用することができない。
例
Book.where(author: Edogawa).first
==>Nisendouka
Bookモデル全体から、authorがEdogawaであるという条件で絞り込む。その中で一番最初のインスタンスを取り出す。