Después de probar muchos tutoriales para cambiar un select dinámicamente, usando jQuery, encontré esta solución. Seguramente no sea la más elegante pero funciona y no tiene mucha complicación.
En mi caso lo que quería era un select de productos en función del cliente que seleccionase en otro select.
Entonces, lo primero, añadir el código javascript:
// onChange clients load Products via Ajax
$("#order_client_id").live("change",function(){
change_client_id = $("#order_client_id").val();
$.ajax({
type: "GET",
url: "/getproducts/" + change_client_id,
data: change_client_id,
beforeSend:function(){
//$(".spinner").show();
},
success: function(html){
$("#products").html(html);
//$(".spinner").hide();
}
});
});
// OnChange product set value hidden_field product_id
$("#order_ajax_product_id").live("change",function(){
change_product_id = $("#order_ajax_product_id").val();
$("#order_product_id").val(change_product_id);
valor = $("#order_product_id").val();
});
});
El primer bloque de código es el que carga los productos del cliente seleccionado vía Ajax.
El segundo bloque, guarda el valor del producto en un campo oculto para cuando se manda el formulario. Esto último no sé muy bien porqué hay que hacerlo pero el caso es que si no lo hago no manda el valor.
Y el resto no tiene mucho que explicar. Tuve que añadir el “getproducts” al routes.rb para que llamase a la función que creé en el controlador:
Esta es la función del controlador que saca los productos en función del id de cliente que recibe:
def get_products
@products = Product.find_all_by_client_id(params['client_id'])
end
Y también tengo un create.js.erb para que cuando guarde los valores del fomulario, actualice la tabla que muestra los datos.
HABLA / AÑADE TU COMENTARIO
Los comentarios están moderados


