2012-01-30 1 views
6

Im la recherche d'un bon plug-in Jquery qui peut gérer trouver le pays une ville appartient (le type avec saisie semi-automatique)Rails/Jquery Autocomplete plug-in complet automatique pour la ville, pays

par exemple:

Typing "New Yor" 

Si saisie semi-automatique

New York, United States 

et être en mesure de sauver la ville et le pays comme

:city 
:country 

Quel serait un bon moyen d'atteindre une telle fonctionnalité? Je veux dire plus en termes de stockage de tous les pays et villes dans la base de données des utilisateurs. Je connais le https://github.com/jim/carmen mais celui-ci est en train d'être réécrit et j'aimerais bien le comprendre moi-même, avec un peu d'aide.

Répondre

8

pourrait tout aussi bien écrire votre propre logique pour cela car je ne pense pas un plugin va présenter lui-même:

Je suppose que la ville et le pays ont ids. Sinon, la logique serait en fait plus simple. Utilisez la saisie semi-automatique de jQueryUI pour déclencher la saisie semi-automatique de votre élément. Ajoutez une méthode de contrôleur, qui donnera votre étiquette de ville et de pays (probablement une méthode sur un objet ville) avec vos identifiants comme json. Dans le rappel automatique "select", définissez les champs masqués dans votre formulaire pour les ID de ville et de pays. Cette dernière partie est facultative car je ne sais pas comment vous prévoyez de conserver ces données à partir du formulaire.

Les exemples suivants supposent beaucoup sur votre application, mais devrait être suffisant pour vous aider à démarrer:

exemple de script pour la vue:

$("#yourField").autocomplete({ 
     source: "/path_to_your_action", 
     minLength: 2, 
     select: function(event, ui) { 
     $(this).val(ui.item.label); 
     $(this).find("#country_id").val(ui.item.country_id); 
     $(this).find("#city_id").val(ui.item.city_id); 
     event.preventDefault; 
     } 
    }) 
contrôleur

:

def your_action 
    term = params[:term] 
    cities = City.where("cities.name like ?", "%#{term}%") 
    .limit(25) 
    .all 
    render :json=>cities.collect{|c| {:label=>c.your_label_method, :city_id=>c.id, :country_id=>c.country_id}} 
end 

city.rb

def your_label_method 
    "#{self.name}, #{self.country.name)}" 
end 
+0

A obtenu un bon chemin dans la bonne direction avec ceci, merci! – Rubytastic

0

Dans votre cas, la meilleure solution pour moi est d'utiliser google map api pour connaître un bon rendement. Vous pouvez par exemple utiliser le plugin htp: //github.com/sgruhier/jquery-addresspicker.

+0

Merci, je regarde dans ceci, laissez la question ouverte pour plus de réponse Cela pourrait fonctionner avec quelques modifications seulement le problème est que vous n'avez alors aucun contrôle sur les valeurs retournées. États-Unis au lieu des États-Unis. Je préférerais une solution locale avec la base de données propre au pays. merci pour souligner la gemme – Rubytastic

Questions connexes