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
|