Method: ActiveRecord::FinderMethods#raise_record_not_found_exception!

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

#raise_record_not_found_exception!(ids = nil, result_size = nil, expected_size = nil, key = primary_key, not_found_ids = nil) ⇒ Object

This method is called whenever no records are found with either a single id or multiple ids and raises an ActiveRecord::RecordNotFound exception.

The error message is different depending on whether a single id or multiple ids are provided. If multiple ids are provided, then the number of results obtained should be provided in the result_size argument and the expected number of results should be provided in the expected_size argument.



417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
# File 'activerecord/lib/active_record/relation/finder_methods.rb', line 417

def raise_record_not_found_exception!(ids = nil, result_size = nil, expected_size = nil, key = primary_key, not_found_ids = nil) # :nodoc:
  conditions = " [#{arel.where_sql(model)}]" unless where_clause.empty?

  name = model.name

  if ids.nil?
    error = +"Couldn't find #{name}"
    error << " with#{conditions}" if conditions
    raise RecordNotFound.new(error, name, key)
  elsif Array.wrap(ids).size == 1
    error = "Couldn't find #{name} with '#{key}'=#{ids}#{conditions}"
    raise RecordNotFound.new(error, name, key, ids)
  else
    error = +"Couldn't find all #{name.pluralize} with '#{key}': "
    error << "(#{ids.join(", ")})#{conditions} (found #{result_size} results, but was looking for #{expected_size})."
    error << " Couldn't find #{name.pluralize(not_found_ids.size)} with #{key.to_s.pluralize(not_found_ids.size)} #{not_found_ids.join(', ')}." if not_found_ids
    raise RecordNotFound.new(error, name, key, ids)
  end
end