【Rails】find、find_by、whereの違いとは?
こんにちは!CodeClub965のKです!
今回はRailsにおいて、DBからレコードを取得するときによく使う「find」、「find_by」、「where」についてそれぞれの違いについて書いていきます。
長々と説明しても読みづらいのでコード例と合わせて箇条書きにまとめます。
find
findメソッドは各モデルのid(主キー)を検索キーとしてデータを取得します。
id(主キー)以外の条件では検索できません。
// 主キーを指定する
User.find(1)
// 複数指定
User.find(1,2)
以下にまとめます。
・主キーに対応するレコードを取り出す ・主キー以外の条件で検索不可 ・主キーを複数指定することも可能 ・主キーが見つからない場合は、ActiveRecord::RecordNotFoundを返す
find_by
find_byメソッドは、任意の条件で検索するメソッド(idでも検索可能)です。
複数の条件を指定でき、最初に一致した1件だけを返します。
// 検索するキーを指定する
User.find_by(id: 2)
// 複数条件も可能
User.find_by(name: "田中", age: 25)
以下にまとめます。
・与えられた条件に一致するレコードのうち最初のレコードだけを返す ・条件は複数指定できる ・与えられた条件がない場合は「nil」を返す
where
whereメソッドは、与えられた条件に一致するレコードをすべて返します。
// age(年齢)が「20」のレコードを全て取得
User.find_by(age: 20)
// NOT条件:ageが「20」以外のレコードを全て取得
User.where.not(age: 20)
// AND条件:nameが「田中」で、かつageが「20」のレコードを全て取得
User.where(name: "田中").where(age: 20)
// OR条件:nameが「田中」か、ageが「20」のレコードを全て取得
User.where(name: "田中").or(User.where(age: 20))
以下にまとめます。
・与えられた条件に一致するレコードをすべて返す ・NOT条件、AND条件、OR条件などで検索可能 ・条件に一致しない場合は、空の配列を返す
最後に
3つのメソッドの違いがわかったかと思います。
念のため最後に簡単に使い所をまとめておきます。
id(主キー)が分かっていて、そのidのレコードを取得する → find id以外のカラムを検索条件にして1件のレコードを取得する → find_by id以外のカラムを検索条件にして、一致する全てのレコードを取得する → where
ざっくりこんな感じでしょうか。
忘れちゃった時の参考にしてください!
それでは、また!
“【Rails】find、find_by、whereの違いとは?” に対して1件のコメントがあります。