2010-11-27 13 views
8

Quiero realizar una búsqueda en el lugar en mi rieles aplicación.
que utilizan button_to_remote con prototipo, pero ahora estoy usando jQuery, por lo que cambió a link_to.
Este es mi código:link_to con params jquery en los carriles

<%= link_to "Search", {:action => "geocode", :with => "'address='+$('#{address_helper_id}').value"}, :method => :post, :remote => true %> 

Quiero pasar el campo de texto a mi dirección de controlador, pero el resultado no es lo que esperaba.

/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value 

¿Cómo envío mi valor?

Respuesta

15

Es posible que desee para tratar de abordar las cosas un poco más discretamente. Yo recomendaría la sustitución de su llamada link_to con algo como:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %> 

Ésta es prácticamente idéntica a lo que ya tiene, excepto que incluye un identificador único, y también el camino controlador/codificación geográfica en un atributo data-href. Esto te ayudará a mantener tu ruby ​​y javascript un poco más separados.

Luego, en su application.js (o en algún lugar similar):

$('#search_geocode').live('click', function(event){ 
    event.preventDefault(); 
    $.post($(this).attr('data-href') + "?address=" + $('#address').val(), function(data){}); 
}); 

Lo que esto está haciendo efectivamente es vinculante para un oyente click evento al botón de búsqueda, que los mensajes de la dirección de la URL o la ruta proporcionada en el data-href atributo de su enlace de búsqueda.

I Observe también que en su código, que está configurando el id de la dirección de origen en rubí. Si este atributo id necesita cambiar en función de algún tipo de condición de plantilla de página, puede ampliar mi ejemplo agregando otro parámetro data- a su enlace. Por ejemplo:

<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path, :"data-address-id" => address_helper_id %> 

Y de nuevo, en application.js sustitución de más arriba con algo en la línea de:

$('#search_geocode').live('click', function(event){ 
    event.preventDefault(); 
    $.post($(this).attr('data-href') + "?address=" + $($(this).attr('data-address-id')).val(), function(data){}); 
}); 
-1

Esto no es exactamente una respuesta directa a su pregunta, pero ¿ha mirado en jrails? Le permite usar el mismo prototipo de ayudantes de JavaScript que estaba usando antes de cambiar a jquery. Hizo mi transición de prototipo a jquery mucho más fácil.

2

Puede probar esto:
<%= text_field_tag :address %>
<%= submit_tag "Search", :id => "search_button" %>

 

### Paste following code in your javascript 

$("#search_button").live("click", function(){ 
    $.ajax({ 
    complete:function(request){}, 
    data:'address='+ $('#address').val(), 
    dataType:'script', 
    type:'get', 
    url: '[ROUTE TO ACTION]' // in your case, may be '/[CONTROLLER NAME]/geocode' until you define route 
    }) 
}); 

 
3

La forma más fácil es poner el campo de búsqueda y el botón de enviar en una forma normal (usando los carriles predeterminados ven a los ayudantes). Y agrega la opción :remote => :true al formulario. Ver form_for url helper para los documentos.

I gueuss ya ha añadido el archivo rails.js específicos jQuery.

Hacerlo de esta manera va a publicar automáticamente el formulario a través de AJAX a la acción indicada.

Después de eso, solo necesita un controlador de eventos 'ajax: success' para que pueda manejar los datos.

$('<id of the form').bind('ajax:success', function(event, data, status, xhr) { 
    ... process your data here ... 
} 
Cuestiones relacionadas