Module: FriendlyId::FinderMethods

Included in:
History::FinderMethods
Defined in:
lib/friendly_id/finder_methods.rb

Instance Method Summary (collapse)

Instance Method Details

- (Boolean) exists?(conditions = :none)

Returns true if a record with the given id exists.



27
28
29
30
# File 'lib/friendly_id/finder_methods.rb', line 27

def exists?(conditions = :none)
  return super unless conditions.friendly_id?
  exists_by_friendly_id?(conditions)
end

- (Boolean) exists_by_friendly_id?(id)



39
40
41
# File 'lib/friendly_id/finder_methods.rb', line 39

def exists_by_friendly_id?(id)
  where(friendly_id_config.query_field => id).exists?
end

- (Object) find(*args)

Finds a record using the given id.

If the id is “unfriendly”, it will call the original find method. If the id is a numeric string like ‘123’ it will first look for a friendly id matching ‘123’ and then fall back to looking for a record with the numeric id ‘123’.

Since FriendlyId 5.0, if the id is a numeric string like ‘123-foo’ it will only search by friendly id and not fall back to the regular find method.

If you want to search only by the friendly id, use .

Raises:

  • ActiveRecord::RecordNotFound



18
19
20
21
22
23
24
# File 'lib/friendly_id/finder_methods.rb', line 18

def find(*args)
  id = args.first
  return super if args.count != 1 || id.unfriendly_id?
  first_by_friendly_id(id).tap {|result| return result unless result.nil?}
  return super if potential_primary_key?(id)
  raise ActiveRecord::RecordNotFound
end

- (Object) find_by_friendly_id(id)

Finds exclusively by the friendly id, completely bypassing original find.

Raises:

  • ActiveRecord::RecordNotFound



35
36
37
# File 'lib/friendly_id/finder_methods.rb', line 35

def find_by_friendly_id(id)
  first_by_friendly_id(id) or raise ActiveRecord::RecordNotFound
end

- (Object) first_by_friendly_id(id) (private)



56
57
58
# File 'lib/friendly_id/finder_methods.rb', line 56

def first_by_friendly_id(id)
  where(friendly_id_config.query_field => id).first
end

- (Boolean) potential_primary_key?(id) (private)



45
46
47
48
49
50
51
52
53
54
# File 'lib/friendly_id/finder_methods.rb', line 45

def potential_primary_key?(id)
  case primary_key_type
  when :integer
    Integer(id, 10) rescue false
  when :uuid
    id.match /\A[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\z/
  else
    true
  end
end