Module: Frontpack::Searchable

Extended by:
ActiveSupport::Concern
Defined in:
app/controllers/concerns/frontpack/searchable.rb

Overview

Adds dynamic search functionality

Instance Method Summary collapse

Instance Method Details

#basic_search(model, approximate_fields = [], exact_fields = [], include_list = nil) ⇒ Object



8
9
10
11
12
13
14
15
16
# File 'app/controllers/concerns/frontpack/searchable.rb', line 8

def basic_search(model, approximate_fields = [], exact_fields = [], include_list = nil)
  search_conditions = prepare_search_fields model.arel_table, exact_fields, exact: true
  search_conditions += prepare_search_fields model.arel_table, approximate_fields

  query = include_list.present? ? model.includes(include_list) : model
  query = query.where(*search_conditions) if search_conditions.length.positive?

  query.page(params[:page]).per(params[:per_page])
end

#prepare_search_fields(arel_table, fields, **options) ⇒ Object



18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'app/controllers/concerns/frontpack/searchable.rb', line 18

def prepare_search_fields(arel_table, fields, **options)
  [].tap do |search_conditions|
    fields.each do |field|
      val = params[field]
      next if val.blank?

      if options[:exact]
        search_conditions.push(arel_table[field].eq(val))
      else
        search_conditions.push(arel_table[field].matches(Arel::Nodes::SqlLiteral.new("'%#{val}%'")))
      end
    end
  end
end