2012-02-05 6 views
9

Voglio inviare un dati JSON al controlloreCome pubblicare un array in Rails

in javascript, i dati è un array, per esempio, a = [1,2]

poi ho POST, per esempio

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

nel controller utente, ottengo i dati dai parametri.

Tuttavia, quando ho recuperare params [: dati], ho ottenuto un hash:

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

piuttosto che una matrice!

quindi devo convertire manualmente l'hash in un array.

Esiste un metodo per passare l'array esatto al controller?

+1

Eventuali duplicati: http://stackoverflow.com/questions/6410810/rails-not-decoding-json -from-jquery-correct-array-getting-a-hash-with-intege –

+0

cosa succede se si usa 'a.map (&: id)' se a è la collezione di oggetti? –

+0

@ldiqual: va bene! grazie!! – HanXu

risposta

1

Avresti per convertire il JSON in una stringa, ma questo dovrebbe funzionare:

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

E nel controller, fare qualcosa di simile:

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

Ho avuto un simile problema di recente. La mia correzione era di inviare contenuti JSON invece del modulo predefinito codificato.

ho usato

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

Nel tuo esempio questo potrebbe essere fatto come:

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