jquery - remote - rubyonrails
link_to con jquery params en rieles (4)
Quiero hacer una búsqueda en el lugar en mi aplicación de rieles.
Usé button_to_remote con prototype, pero ahora estoy usando JQuery, así que cambié a link_to.
Este es mi código:
<%= link_to "Search", {:action => "geocode", :with => "''address=''+$(''#{address_helper_id}'').value"}, :method => :post, :remote => true %>
Quiero pasar el campo de texto de la dirección a mi controlador, pero el resultado no es el que esperaba.
/mycontroller/geocode?with=%27address%3D%27%2B%24%28%27record_location___address%27%29.value
¿Cómo presento mi valor?
Esta no es exactamente una respuesta directa a su pregunta, pero ¿ha mirado en jurails ? 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.
Puedes intentar 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
})
});
Es posible que desee intentar acercarse a las cosas un poco más discretamente. Yo recomendaría reemplazar su link_to
call con algo como:
<%= link_to "Search", "#", :id => "search_geocode", :"data-href" => my_controller_geocode_path %>
Esto es prácticamente idéntico a lo que ya tiene, excepto que incluye una identificación única, y también la ruta del controlador / geocodificador 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 vincular un oyente de evento de click
a su botón de búsqueda, que publica la dirección en la url o en la ruta proporcionada en el atributo data-href
de su enlace de búsqueda.
También noté que en su código, está configurando el id
de la dirección de origen en ruby. Si este atributo de 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 de 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 nuevamente, en application.js
reemplazando arriba con algo como:
$(''#search_geocode'').live(''click'', function(event){
event.preventDefault();
$.post($(this).attr(''data-href'') + "?address=" + $($(this).attr(''data-address-id'')).val(), function(data){} );
});
La forma más fácil es colocar el campo de búsqueda y el botón de enviar en una forma normal (utilizando los ayudantes de vista de rieles predeterminados). Y agrega la opción :remote => :true
al formulario. Ver form_for url helper para los documentos.
Le indico que ya ha agregado el archivo jquery específico rails.js.
Hacerlo de esta manera automáticamente publicará el formulario a través de ajax a la acción dada.
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 ...
}