module AutocompleteActiveAdmin::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/autocomplete-activeadmin/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