class RESTFramework::ModelSearchFilter

Multi-field text searching on models.

Public Instance Methods

get_filtered_data(data) click to toggle source

Filter data according to the request query parameters.

# 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 CHAR) #{@controller.send(:search_ilike) ? "ILIKE" : "LIKE"} ?"
    }.join(' OR '), *(["%#{search}%"] * fields.length))
  end

  return data
end