Module: Searchable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- lib/templates/rails/file_utils/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
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, **) [].tap do |search_conditions| fields.each do |field| next if (val = params[field]).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 |