[Rails]find_or_create_byとfind_or_initialize_by
Rails4で確認。
オブジェクトが存在する場合は取得、なければ作成、ということがしたい場合にfind_or_create_byが使うと便利です。
user = User.find_or_create_by(uid: 'sample') # uid = 'sample' のユーザが存在する場合は取得、しなければ新規保存
ですが、find_or_create_byだと新規作成の場合のみ特定の処理をさせたい、といった場合にnew_recordなのかどうか区別がつきません。
その場合は、find_or_create_byではなくfind_or_initialize_byを使います。
user = User.find_or_initialize_by(uid: 'sample') # uid = 'sample' のユーザが存在する場合は取得、しなければ新規作成(未保存)
if user.new_record? # 新規作成の場合は保存
user.save!
# 新規作成時に行いたい処理を記述
end
new_record?を使うと新規作成かどうかが区別できるので、新規作成時のみ特定の処理を行うことが可能になります。