An easy way to use jQuery's autocomplete with Rails 3. You can find a detailed example on how to use this gem here.
Make sure your project is using jQuery-ui with the autocomplete widget before you continue.
You can find more info about that here:
I'd encourage you to understand how to use those 3 amazing tools before attempting to use this gem.
Include the gem on your Gemfile
gem 'rails3-jquery-autocomplete', '>= 0.2.0'
Install it
bundle install
Run the generator
rails generate autocomplete
And include autocomplete-rails.js on your layouts
javascript_include_tag "autocomplete-rails.js"
Assuming you have a Brand model:
class Brand < ActiveRecord::Base
end
create_table :brand do |t|
t.column :name, :string
end
To set up the required action on your controller, all you have to do is call it with the class name and the method as in the following example:
class ProductsController < Admin::BaseController
autocomplete :brand, :name
end
This will create an action autocomplete_brand_name on your controller, don't forget to add it on your routes file
resources :products do
get :autocomplete_brand_name, :on => :collection
end
By default, the search starts from the beginning of the string you're searching for. If you want to do a full search, set the full parameter to true.
class ProductsController < Admin::BaseController
autocomplete :brand, :name, :full => true
end
The following terms would match the query 'un':
- Luna
- Unacceptable
- Rerun
Only the following terms mould match the query 'un':
- Unacceptable
If you want to display a different version of what you're looking for, you can use the :display_value option.
This options receives a method name as the parameter, and that method will be called on the instance when displaying the results.
class Brand < ActiveRecord::Base
def funky_method
"#{self.name}.camelize"
end
end
class ProductsController < Admin::BaseController
autocomplete :brand, :name, :display_value => :funky_method
end
In the example above, you will search by name, but the autocomplete list will display the result of funky_method
This wouldn't really make much sense unless you use it with the :id_element HTML tag. (See below)
On your view, all you have to do is include the attribute autocomplete on the text field using the url to the autocomplete action as the value. form_for @product do |f| f.text_field :brand_name, :autocomplete => autocomplete_brand_name_products_path end
This will generate an HTML tag that looks like:
<input type="text" autocomplete="products/autocomplete_brand_name">
Now your autocomplete JS code is unobtrusive, Rails 3 style.
If you need to use the id of the selected object, you can use the :id_element HTML tag too:
f.text_field :brand_name, :autocomplete => autocomplete_brand_name_products_path, :id_element => '#some_element'
This will update the field with id *#some_element with the id of the selected object. The value for this option can be any jQuery selector.
If you want to make changes to the gem, first install bundler 1.0.0:
gem install bundler --pre
And then, install all your dependencies:
bundle install
rake test
Crowd Interactive is an American web design and development company that happens to work in Colima, Mexico. We specialize in building and growing online retail stores. We don’t work with everyone – just companies we believe in. Call us today to see if there’s a fit. Find more info here!