Module: Frontpack::Searchable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/controllers/concerns/frontpack/searchable.rb
Overview
Adds dynamic search functionality
Instance Method Summary collapse
- #basic_search(model, approximate_fields = [], exact_fields = [], include_list = nil) ⇒ Object
- #prepare_search_fields(arel_table, fields, **options) ⇒ Object
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, **) [].tap do |search_conditions| fields.each do |field| val = params[field] next if val.blank? if [: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 |