module RailsJQueryAutocomplete::Autocomplete::ClassMethods

Usage:

class ProductsController < Admin::BaseController

autocomplete :brand, :name

end

This will magically generate an action autocomplete_brand_name, so, don't forget to add it on your routes file

resources :products do
   get :autocomplete_brand_name, :on => :collection
end

Now, on your view, all you have to do is have a text field like:

f.text_field :brand_name, :autocomplete => autocomplete_brand_name_products_path

Yajl is used by default to encode results, if you want to use a different encoder you can specify your custom encoder via block

class ProductsController < Admin::BaseController

autocomplete :brand, :name do |items|
  CustomJSONEncoder.encode(items)
end

end

Public Instance Methods

autocomplete(object, method, options = {}, &block) click to toggle source
# File lib/rails-jquery-autocomplete/autocomplete.rb, line 41
def autocomplete(object, method, options = {}, &block)

  define_method("get_prefix") do |model|
    if defined?(Mongoid::Document) && model.include?(Mongoid::Document)
      'mongoid'
    elsif defined?(MongoMapper::Document) && model.include?(MongoMapper::Document)
      'mongo_mapper'
    else
      'active_record'
    end
  end
  define_method("get_autocomplete_order") do |method, options, model=nil|
    method("#{get_prefix(get_object(options[:class_name] || object))}_get_autocomplete_order").call(method, options, model)
  end

  define_method("get_autocomplete_items") do |parameters|
    method("#{get_prefix(get_object(options[:class_name] || object))}_get_autocomplete_items").call(parameters)
  end

  define_method("autocomplete_#{object}_#{method}") do

    method = options[:column_name] if options.has_key?(:column_name)

    term = params[:term]

    if term && !term.blank?
      #allow specifying fully qualified class name for model object
      class_name = options[:class_name] || object
      items = get_autocomplete_items(:model => get_object(class_name), \
        :options => options, :term => term, :method => method)
    else
      items = {}
    end

    render :json => json_for_autocomplete(items, options[:display_value] ||= method, options[:extra_data], &block), root: false
  end
end