Module: Searchable

Extended by:
ActiveSupport::Concern
Defined in:
lib/templates/rails/file_utils/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



7
8
9
10
11
12
13
14
15
# File 'lib/templates/rails/file_utils/searchable.rb', line 7

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])
end

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



17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/templates/rails/file_utils/searchable.rb', line 17

def prepare_search_fields(arel_table, fields, **options)
  [].tap do |search_conditions|
    fields.each do |field|
      next if (val = params[field]).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