【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

ざっくりこんな感じでしょうか。

忘れちゃった時の参考にしてください!
それでは、また!

Follow me!

【Rails】find、find_by、whereの違いとは?” に対して1件のコメントがあります。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です