Module: Dorsale::Search::ClassMethods

Defined in:
lib/dorsale/search.rb

Instance Method Summary collapse

Instance Method Details

#default_search_fieldsObject



8
9
10
11
12
# File 'lib/dorsale/search.rb', line 8

def default_search_fields
  fields = columns.map do |column|
    "#{table_name}.#{column.name}"
  end
end

#search(q, *fields) ⇒ Object



14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/dorsale/search.rb', line 14

def search(q, *fields)
  words  = q.to_s.parameterize.split("-")
  fields = default_search_fields if fields.empty?
  
  sql_query = words.map.with_index do |word, index|
    fields.map do |field|
      "(LOWER(CAST(#{field} AS TEXT)) LIKE :w#{index})"
    end.join(" OR ")
  end.map{ |e| "(#{e})" }.join(" AND ")
  
  sql_params_a = words.map.with_index do |word, index|
    ["w#{index}".to_sym, "%#{word}%"]
  end
  
  sql_params_h = Hash[sql_params_a]
  
  self.where(sql_query, sql_params_h)
end