2012-02-05 5 views
9

Quiero publicar un datos como JSON al controladorde cómo escribir una matriz en rieles

en JavaScript, los datos es una matriz, por ejemplo, a = [1,2]

entonces POST, digamos

$.post('user/data', {'data' : a}) 

En el controlador de usuario, obtengo los datos de params.

Sin embargo, cuando recupero params [:] de datos, tengo un hash:

{"0"=>1, "1"=>2} 

en lugar de una matriz!

así que tengo que convertir el hash en una matriz manualmente.

¿Hay algún método para pasar la matriz exacta al controlador?

+1

Posible duplicado: http://stackoverflow.com/questions/6410810/rails-not-decoding-json -from-jquery-properly-array-becoming-a-hash-with-intege –

+0

¿Qué ocurre si se utiliza 'a.map (&: id)' si a es la colección de objetos? –

+0

@ldiqual: ¡eso es bueno! ¡¡gracias!! – HanXu

Respuesta

1

Habría que convertir el JSON en una cadena, pero esto funcionaría:

/path/to/url?data[]=1&data[]=2&data[]=3

Y en el controlador, hacer algo como:

params[:data].each_with_index do |data, index| 
    do_something_with_data 
end 
2

que tenía un parecido problema recientemente Mi solución fue enviar contenido json en lugar de la forma predeterminada codificada.

que utilizan

$.ajax(
{ 
    type: "POST", 
    url: url, 
    data: JSON.stringify(data), 
    dataType: "json", 
    contentType: 'application/json' 
} 
); 

En el ejemplo, esto se podría hacer como:

$.ajax(
     { 
     type: "POST", 
     url: 'user/data', 
     data: JSON.stringify({'data' : a}), 
     dataType: "json", 
     contentType: 'application/json' 
     } 
    ); 
Cuestiones relacionadas