条件を指定して初めの1件を取得し1件もなければ作成
適応バージョン
- 4.0.2
- 4.1.8
- 4.2.1
- 4.2.7
- 4.2.9
- 5.0.0.1
- 5.1.7
- 5.2.3
- 6.0.2.1
- 7.0.0
説明
条件を指定して初めの1件を取得し1件もなければ作成
使い方
モデル.find_or_create_by(条件, ブロック引数)
# 失敗したら例外発生
モデル.find_or_create_by!(条件, ブロック引数)
例
存在しないので新しく作成
User.find_or_create_by(first_name: "Taraou")
#=> <User id: 1, first_name: "Tarou", last_name: nil>
既に存在する場合は既存のレコードを取得
User.find_or_create_by(first_name: "Taraou")
#=> <User id: 1, first_name: "Taraou", last_name: nil>
ブロック指定
User.find_or_create_by(first_name: "Scarlett") do |user|
user.last_name = "Johansson"
end
#=> <User id: 2, first_name: "Scarlett", last_name: "Johansson">
補足
- find_or_create_byとの違いは、作成する時に呼ぶメソッドがnewではなくcreate