【Rails】ActiveRecordのfind_byとfind_by!メソッドの使い方まとめ

Rails

ActiveRecordのfind_byメソッドの使い方

ActiveRecordのfind_byメソッドは、指定した属性値を持つレコードを1件取得する際に使用します。

使い方は次のようになります。

モデル名.find_by(カラム1: value1, カラム2: value2, ...)

例えば、Userモデルからemailが”john@example.com“のレコードを取得する場合は、次のようになります。

user = User.find_by(email: "john@example.com")

これにより、emailが”john@example.com”のユーザーのレコードが取得されます。 もし、指定した条件に合うレコードが存在しない場合はnilが返ります。

find_byメソッドはfindメソッドと違って、主キーではなく属性値を指定して、個別のレコードを取得するのに適しています。

また、複数のレコードを取得する場合には、whereメソッドなどを使用しましょう。

ちなみに、find_byメソッドは、find_by_*という使い方ができます。

例えば、find_by_emailメソッドではemailカラムで検索し、find_by_email_and_nameメソッドでは、emailとnameカラムで検索することができます。

ActiveRecordのfind_by!メソッドの使い方

ActiveRecordのfind_by!メソッドは、find_byメソッドと同じように指定した属性値を持つレコードを1件取得します。

違いとしてはfind_by!メソッドは、取得に失敗した場合にActiveRecord::RecordNotFound例外を発生させます。

使い方は次のようになります。

モデル名.find_by!(カラム1: value1, カラム2: value2, ...)

例えば、Userモデルからemailが”john@example.com”のレコードを取得する場合は、次のようになります。

user = User.find_by!(email: "john@example.com")

これにより、emailが”john@example.com”のユーザーのレコードが取得されます。

もし、指定した条件に合うレコードが存在しない場合はActiveRecord::RecordNotFound例外が発生します。

find_by!メソッドは、find!メソッドと同じように、取得に失敗した場合に明確なエラーを伝えることができるため、取得に失敗しても致命的なエラーではない場合に使用することができます。

例外処理を記述も合わせたコード例は以下の通りです。

begin
  user = User.find_by!(email: "john@example.com")
rescue ActiveRecord::RecordNotFound => e
  puts "エラー: #{e.message}"
end

このように、find_by!メソッドを使用することで、取得に失敗した場合に明確なエラーを伝えることができます。

また、取得したいレコードが複数存在する場合には、find_byメソッドの代わりに、whereメソッドやfind_by_sqlメソッドなどを使用しましょう。

タイトルとURLをコピーしました