【Rails】find_byとfind_by!の違いは?

こんにちは!CODE CLUB965のKです!

Railsで特定のレコードを探すときに使う「find_by」がありますが、「find_by!」があることはご存知でしょうか?

今回は、その「find_by!」について「find_by」との違いを解説したいと思います。

find_byとは?

まず、そもそも find_by って何?という方に向けて簡単に説明したいと思います。

find_byメソッドは、任意の条件でレコードを検索するメソッドです。
複数の条件を指定でき、最初に一致した1件だけを返します。

// 検索するキーを指定する
User.find_by(id: 2)

// 複数条件も可能
User.find_by(name: "田中", age: 25)

以下にまとめます。

・与えられた条件に一致するレコードのうち最初のレコードだけを返す
・条件は複数指定できる
・与えられた条件がない場合は「nil」を返す

find_by!との違いは?

では、find_by と find_by! の違いは何でしょうか?

上記のfind_byの説明で、条件に一致しない場合「nil」を返すとありました。
ただ、場合によっては find_by を使った時でも「nil」を返さず、例外を発生させてエラー画面を表示したい!という時もあったりします。

そんなときに「find_by!」を使います。

「!」を付けるだけでヒットするレコードがなかった場合、例外が発生するようになります。

以下にまとめます。

レコードが見つからなかったときの違い
・find_by → 「nil」を返す
・find_by! → 「例外」が発生

違いはたったこれだけです。
しっかり使い分けましょう!

最後に

「find_by」以外にも「find」や「where」もありますが、その違いについては既に記事にまとめていますので参考にしてください。

レコードを取得したいときの基本は知ることができるので読んでみてください!

それでは、また!

Follow me!