многомерный массив от javascript / jquery до ruby ​​/ sinatra - PullRequest
1 голос
/ 30 октября 2009

как передать двумерный массив из javascript в ruby, пожалуйста? У меня есть это на стороне клиента:

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.

Может кто-нибудь помочь, или, может быть, опубликовать небольшой фрагмент правильного кода, пожалуйста? Спасибо

Ответы [ 2 ]

0 голосов
/ 30 июня 2010

Я не уверен, поможет ли это, но у меня две мысли: сериализовать поля и / или выполнить итерацию массива.

Мне удалось получить массив 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 }

Преобразование туда-сюда кажется немного громоздким, но я нашел его наиболее очевидным способом обработки массива.

0 голосов
/ 30 октября 2009

Возможно, вы захотите создать JSON вручную, на стороне javascript:

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

Это создаст массив массивов с объектами.

Это может выглядеть так:

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

У меня может быть что-то здесь, но это должно быть близко к тому, как это будет выглядеть.

...