2012-01-30 20 views
6

Im en busca de un buen plugin de jQuery que puede manejar encontrar el país una ciudad pertenece a (el tipo con autocompletar)rieles/Jquery autocompletar automático complemento completo para la ciudad, país

por ejemplo:

Typing "New Yor" 

en caso de autocompletar a

New York, United States 

y ser capaz de salvar a la ciudad y el país como

:city 
:country 

¿Cuál sería una buena forma de lograr tal funcionalidad? Me refiero a más en términos de almacenar todos los países y ciudades en la base de datos de usuarios. Sé https://github.com/jim/carmen pero ese está siendo reescrito y me encantaría resolverlo yo mismo, con un poco de ayuda.

Respuesta

8

fuerza también escribir su propia lógica para esto, ya que no creo que un plugin va a presentarse a sí misma:

Asumo la ciudad y el país tienen ID. De lo contrario, la lógica sería más simple. Usa la función de autocompletar de jQueryUI para activar la función de autocompletar para tu elemento. Agregue un método de controlador, que le dará la etiqueta de ciudad y país (probablemente un método en un objeto de ciudad) junto con sus identificadores como json. En la devolución de llamada de "selección" de autocompletar, configure los campos ocultos en su formulario para los ID de ciudades y países. Esta última parte es opcional porque no sé cómo planea mantener estos datos en el formulario.

Los ejemplos siguientes suponen mucho acerca de su aplicación, pero debería ser suficiente para empezar:

ejemplo de guión para la vista:

$("#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; 
     } 
    }) 

controlador:

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

¡Hizo un buen camino en la dirección correcta con esto, gracias! – Rubytastic

0

En su caso, la mejor solución para mí es utilizar la API de google api para saber un buen rendimiento. Por ejemplo, puede usar el complemento htp: //github.com/sgruhier/jquery-addresspicker.

+0

Gracias, miro esto, deje la pregunta abierta para una respuesta más. Esto podría funcionar con algunas modificaciones. El único problema es que no tiene control sobre los valores devueltos. Estados Unidos en lugar de Estados Unidos. Preferiría una solución local con base de datos de país propia. sin embargo, por señalar la gema – Rubytastic

Cuestiones relacionadas