Class: Rails::Contact::Search::Backends::Database

Inherits:
Object
  • Object
show all
Defined in:
lib/rails/contact/search/backends/database.rb

Instance Method Summary collapse

Instance Method Details

#search(query, filters) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# File 'lib/rails/contact/search/backends/database.rb', line 6

def search(query, filters)
  scope = Contact.includes(:emails, :phones).recent_first
  scope = apply_filters(scope, filters)
  return scope.limit(limit) if query.blank?

  wildcard = "%#{query.downcase}%"
  scope.left_joins(:emails, :phones).where(
    "LOWER(rails_contact_contacts.given_name) LIKE :q OR "\
    "LOWER(rails_contact_contacts.family_name) LIKE :q OR "\
    "LOWER(rails_contact_contact_emails.value) LIKE :q OR "\
    "rails_contact_contact_phones.e164 LIKE :raw",
    q: wildcard,
    raw: "%#{query}%"
  ).distinct.limit(limit)
end