2009-10-30 51 views
1

我該如何將javascript的二維數組傳遞給ruby?我有這樣的客戶端:mutidimensional數組從javascript/jquery到ruby/sinatra

function send_data() { 
    var testdata = { 
     "1": { 
      "name": "client_1", 
      "note": "bigboy" 
     }, 
     "2": { 
      "name": "client_2", 
      "note": "smallboy" 
     } 
    } 

    console.log(testdata); 
    $.ajax({ 
     type: 'POST', 
     url: 'test', 
     dataType: 'json', 
     data: testdata 
    }); 
    } 

,這在服務器端:

post '/test' do p params end 

,但我無法得到它的權利。我能得到服務器端最好的是一樣的東西

{"1"=>"[object Object]", "2"=>"[object Object]"} 

我嘗試添加JSON.stringify在客戶端和JSON.parse在服務器端,但首先導致

{"{\"1\":{\"name\":\"client_1\",\"note\":\"bigboy\"},\"2\":{\"name\":\"client_2\",\"note\":\"smallboy\"}}"=>nil} 

而後者拋出了TypeError - 無法將Hash轉換爲String。

任何人都可以幫忙,或者發佈一小段正確的代碼嗎?謝謝

回答

0

您可能需要手動建立的JSON,在JavaScript端:

[[{'object':'name1'},{'object':'name2'}],[...],[...]] 

這將建立數組與對象的數組。

它可能看起來像這樣:

testdata = [[{ 
     "1": { 
      "name": "client_1", 
      "note": "bigboy" 
     }], 
     [{"2": { 
      "name": "client_2", 
      "note": "smallboy" 
     }] 
    }] 

我可能有一些在這裏下車,但是這應該是接近它會是什麼樣子。

0

我不確定這是否會有所幫助,但我有兩個想法:序列化字段和/或迭代數組。

我管理通過設置串行化其具有存儲子陣列的字段,以獲取JSON數組成ActiveRecord對象:

class MyModel < ActiveRecord::Base 
    serialize :tags 
end 

和使用迭代處理JSON數組:

f = File.read("myarrayof.json") 
jarray = JSON.load(f) 
jarray.each { |j| MyModel.create.from_json(j.to_json).save } 

來回轉換似乎有點麻煩,但我發現它是處理數組的最明顯方式。