Railsでレコードが存在する場合はレコードを返し、存在しない場合は新規作成する方法(find_or_create_by)

こんにちは!

今回はRailsでレコードが存在する場合はレコードを返し、存在しない場合は新規作成する方法(find_or_create_by)についてまとめます。

やりたいこと

  • ある条件のレコードが存在しなければ追加したい
  • すでにレコードが存在すればそのレコードを取得したい

find_or_create_byメソッド

  • find_or_create_by(検索条件のハッシュ)

使用例

# Productモデルをproduct_nameで検索し、すでに同名のレコードが存在すればproductに格納。
# 存在しなければproduct_nameのレコードを作成しproductに格納する。
product = Product.find_or_create_by(name: product_name)

使用しない場合

if product = Product.find_by(name: product_name)
else
  product = Product.create(name: product_name)
end

使用しない場合(三項演算子

product = Product.find_by(name: product_name)
             ? Product.find_by(name: product_name)
             : Product.create(name: product_name)
  • ‘find_or_create_byを使えばfind_bycreate`の条件分岐を一つのメソッドで簡潔に書けて便利

おわりに

Railsでレコードが存在する場合はレコードを返し、存在しない場合は新規作成する方法(find_or_create_by)についてまとめました。コードが冗長になっていたので調べたところこのメソッドを見つけました。Railsにはやりたいことを実現するための方法が用意されていることが多くて助かりますね!

70/100