Module: FriendlyId::FinderMethods
- Included in:
- History::FinderMethods
- Defined in:
- lib/friendly_id/finder_methods.rb
Instance Method Summary (collapse)
-
- (Boolean) exists?(conditions = :none)
Returns true if a record with the given id exists.
- - (Boolean) exists_by_friendly_id?(id)
-
- (Object) find(*args)
Finds a record using the given id.
-
- (Object) find_by_friendly_id(id)
Finds exclusively by the friendly id, completely bypassing original
find
. - - (Object) first_by_friendly_id(id) private
- - (Boolean) potential_primary_key?(id) private
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 #find_by_friendly_id.
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
.
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 |