Method: ActiveRecord::Relation#create_or_find_by!

Defined in:
activerecord/lib/active_record/relation.rb

#create_or_find_by!(attributes, &block) ⇒ Object

Like #create_or_find_by, but calls create! so an exception is raised if the created record is invalid.



281
282
283
284
285
286
287
288
289
290
291
# File 'activerecord/lib/active_record/relation.rb', line 281

def create_or_find_by!(attributes, &block)
  with_connection do |connection|
    transaction(requires_new: true) { create!(attributes, &block) }
  rescue ActiveRecord::RecordNotUnique
    if connection.transaction_open?
      where(attributes).lock.find_by!(attributes)
    else
      find_by!(attributes)
    end
  end
end