こんにちは!
今回は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_byと
create`の条件分岐を一つのメソッドで簡潔に書けて便利
おわりに
Railsでレコードが存在する場合はレコードを返し、存在しない場合は新規作成する方法(find_or_create_by)についてまとめました。コードが冗長になっていたので調べたところこのメソッドを見つけました。Railsにはやりたいことを実現するための方法が用意されていることが多くて助かりますね!
70/100