Like #create_or_find_by, but calls
{create!}[rdoc-ref:Persistence::ClassMethods#create!] so an exception is
raised if the created record is invalid.
# File activerecord/lib/active_record/relation.rb, line 286
def create_or_find_by!(attributes, &block)
with_connection do |connection|
record = nil
transaction(requires_new: true) do
record = create!(attributes, &block)
record._last_transaction_return_status || raise(ActiveRecord::Rollback)
end
record
rescue ActiveRecord::RecordNotUnique
if connection.transaction_open?
where(attributes).lock.find_by!(attributes)
else
find_by!(attributes)
end
end
end