Text_field_with_auto_complete co n información extra

Hola a todos/as,

Estoy utilizando el plugin auto_complete de la siguiente forma

Controlador:

auto_complete_for :track, :title

Vista:

<%= text_field_with_auto_complete :track, :title,
{ :size => 25 },
:skip_style => true,
:indicator => “activity_indicator” -%>
<%= image_tag
‘spinner.gif’%>

Y hasta aquí todo me funciona de maravilla realizando la siguiente
búsqueda en base de datos y mostrando la lista recuperada

Track.find(:all, :conditions => [“LOWER(title) LIKE ?”, ‘%’ +
params[track][title] + ‘%’])

La anterior busqueda la construye el propio plugin con los parámetros
:track y :title del text_field_with_auto_complete.

Mi problema llega cuando quiero añadir una nueva condición de búsqueda,
quiero buscar las tracks con un determinado catalog_id. El dato
de catalog_id lo tengo disponible en la vista, así que supongo que no
habría problema en enviarlo a la petición de autocomplete.

Pero realmente no se como hacerlo, si con el parametro :with o ¿como?

incluyendo :with => “‘catalog_id=’ + $(’#{@catalog.id}’).value”,
realmente no se lo que significa el :with. Además mis conocimientos de
javascript son muy mínimos.

Un saludo y gracias

2008/6/21 Paco G. Rivas [email protected]:

Pero realmente no se como hacerlo, si con el parametro :with o ¿como?

incluyendo :with => “‘catalog_id=’ + $(‘#{@catalog.id}’).value”, realmente

Prototype ofrece $F(‘campo’) para decir $(‘campo’).value.

no se lo que significa el :with. Además mis conocimientos de
javascript son muy mínimos.

Muy bien estas cerca.

Ese parametro es una expresion JavaScript cuyo valor debe ser un query
string vamos a decir. Por defecto es algo del estilo
‘fieldname=value’, donde “fieldname” es el nombre del campo de texto,
y “value” el valor.

Si seteas :with entonces debes incluir tambien el campo de texto
mismo, ya que :with no son campos ademas del de texto, si no que
configura todo lo que se envia.

Como la llave y el valor necesitan codificacion delegamos en el
serialize() de Prototype de este modo:

:with => “[$(‘el_campo_de_texto’).serialize(),
$(‘catalog_id’).serialize()].join(‘&’)”

A veces acabas antes serializando el form que contiene al campo de
texto:

:with => “$(‘el_form’).serialize()”

por ejemplo yo uso esa tecnica para poder añadir distintos tipos de
restricciones a la busqueda, van en campos ocultos y de ese modo los
envias todos bien escapados y de forma muy sencilla.

Seguramente ya sabras que en el servidor tendras que escribir una
accion ad-hoc, y que los resultados se devuelven facil con el helper
auto_complete_result.