Module: FriendlyId::History::FinderMethods

Defined in:
lib/friendly_id/history.rb

Overview

Adds a finder that explictly uses slugs from the slug table.

Instance Method Summary collapse

Instance Method Details

#exists?(id = false) ⇒ Boolean

Search for a record in the slugs table using the specified slug.

Returns:

  • (Boolean)


98
99
100
101
102
103
# File 'lib/friendly_id/history.rb', line 98

def exists?(id = false)
  return super if id.unfriendly_id?
  exists_without_friendly_id?(@klass.friendly_id_config.query_field => id) or
  with_old_friendly_id(id) {|x| exists_without_friendly_id?(x)} or
  exists_without_friendly_id?(id)
end

#find_one(id) ⇒ Object

Search for a record in the slugs table using the specified slug.



90
91
92
93
94
95
# File 'lib/friendly_id/history.rb', line 90

def find_one(id)
  return super(id) if id.unfriendly_id?
  where(@klass.friendly_id_config.query_field => id).first or
  with_old_friendly_id(id) {|x| find_one_without_friendly_id(x)} or
  find_one_without_friendly_id(id)
end

#with_old_friendly_id(slug) {|sluggable_id| ... } ⇒ Object (private)

Accepts a slug, and yields a corresponding sluggable_id into the block.

Yields:

  • (sluggable_id)


108
109
110
111
112
113
# File 'lib/friendly_id/history.rb', line 108

def with_old_friendly_id(slug, &block)
  sql = "SELECT sluggable_id FROM #{Slug.quoted_table_name} WHERE sluggable_type = %s AND slug = %s"
  sql = sql % [@klass.base_class.to_s, slug].map {|x| connection.quote(x)}
  sluggable_id = connection.select_values(sql).first
  yield sluggable_id if sluggable_id
end