Class: RESTFramework::ModelSearchFilter

Inherits:
BaseFilter
  • Object
show all
Defined in:
lib/rest_framework/filters.rb

Overview

Multi-field text searching on models.

Instance Method Summary collapse

Methods inherited from BaseFilter

#initialize

Constructor Details

This class inherits a constructor from RESTFramework::BaseFilter

Instance Method Details

#get_filtered_data(data) ⇒ Object

Filter data according to the request query parameters.



80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/rest_framework/filters.rb', line 80

def get_filtered_data(data)
  fields = @controller.send(:get_search_fields)
  search = @controller.request.query_parameters[@controller.send(:search_query_param)]

  # Ensure we use array conditions to prevent SQL injection.
  unless search.blank?
    return data.where(fields.map { |f|
      "CAST(#{f} AS text) #{@controller.send(:search_ilike) ? "ILIKE" : "LIKE"} ?"
    }.join(' OR '), *(["%#{search}%"] * fields.length))
  end

  return data
end