Magazine Tecnologia

Ricerca rapida con rails3-jquery-autocomplete

Creato il 05 gennaio 2012 da Mareika @mareikagiacobbi
p. Per implementare all'interno di una casella di testo una ricerca rapida su un set di campi di uno specifico modello senza troppo curarsi di come creare un'azione ad hoc che fornisca un feed json che mostri i dati ricercati la gemma "rails3-jquery-autocomplete":https://github.com/crowdint/rails3-jquery-autocomplete ci viene incontro. p. Supponiamo di avere un modello *User* con gli attributi *first_name* e *last_name* e di volere recuperare tutti gli utenti che hanno nel proprio first_name o last_name alcuni specifici caratteri digitati nella casella di testo. p. Installiamo la gemma e generiamo i file js p(code_header). Installazione rails3-jquery-autocomplete gem 'rails3-jquery-autocomplete' bundle install rails g autocomplete:install p. Includiamo JQuery, JQueryUI e il plugin per l'autocopletamento p(code_header). app/assets/javascripts/application.js //= require jquery //= require jquery_ujs //= require jquery-ui //= require autocomplete-rails p. Aggiungiamo il metodo *full_name* al modello *User* ed aggiungiamo un metodo di classe che ci permette di eseguire query sull'oggetto User attraverso la direttiva _scope_ p(code_header). app/models/user.rb def full_name "#{self.first_name} #{self.last_name}" end scope :search_full_name, lambda {|q| where(["first_name LIKE ? or last_name LIKE ?", '%'+ q + '%', '%'+ q + '%' ]) } p. Aggiungiamo l'azione per recuperare i vari utenti al controller p(code_header). app/controllers/users_controller.rb class FriendshipsController < ApplicationController autocomplete :user, :first_name, :display_value => :full_name, :extra_data => [:last_name, :first_name] end p. Questo crea un azione chiamata autocomplete_user_first_name all'interno del controller e non dimentichiamoci di aggiungerlo nel file di routes p(code_header). config/routes.rb resources :users do get :autocomplete_user_first_name, :on => :collection end p. Dobbiamo sovrascrivere l'azione *get_autocomplete_items* in quanto di default ritorna l'attributo _name_ del modello che non è presente in questo caso, così facendo verrà ritornato un valore personalizzabile p(code_header). app/controllers/users_controller.rb def get_autocomplete_items(parameters) items=User.search_full_name(params[:term]) end p. Così facendo andiamo a richiamare il metodo di classe _search_full_name_ passandogli i caratteri digitati dall'utente che sono contenuti in *params[:term]* p. Non ci resta che andare ad inserire nella view, dove preferite, il form per eseguire la ricerca p(code_header). app/views/yourview.html.haml =form_tag users_path, :method => 'GET', :class => 'form-item-be form-search' do |f| =label_tag t(:search_by_name) =autocomplete_field_tag 'user[first_name]', '', autocomplete_user_first_name_friendships_path =submit_tag t(:search) p. Il form viene inviato all'azione _index_ del controller Users, a questo punto non vi resta che filtrare i risultati e mostrarli all'utente.

Potrebbero interessarti anche :

Ritornare alla prima pagina di Logo Paperblog

Possono interessarti anche questi articoli :