Sha256: ca96e160c6f3f037d7bf804e9b6720430a65e768beb9e927bbb9001bd7b482c7
Contents?: true
Size: 922 Bytes
Versions: 86
Compression:
Stored size: 922 Bytes
Contents
module Dorsale module Search def self.included(klass) klass.send(:extend, Dorsale::Search::ClassMethods) end module ClassMethods def default_search_fields fields = columns.map do |column| "#{table_name}.#{column.name}" end end 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 end end end
Version data entries
86 entries across 86 versions & 1 rubygems