Построение многозначного JSON для Rails - PullRequest
0 голосов
/ 09 июля 2011

У меня есть следующий объект javascript, содержащий многозначное свойство электронной почты:

var contact = {
    email =     {
        home =         (
            "me@home.com"
        );
        work =         (
            "me@work.com"
        );
    };
    emailCount = 2;
    firstName = Micah;
    lastName = Alcorn;
}

И мне нужно создать следующий JSON для отправки на сервер Rails:

processedContact.params = {
    'contact[first_name]':'Micah',
    'contact[last_name]':'Alcorn',
    'contact[emails_attributes][0][label]':'home',
    'contact[emails_attributes][0][account]':'me@home.com',
    'contact[emails_attributes][1][label]':'work',
    'contact[emails_attributes][1][account]':'me@work.com',
};

Я не знаю, как пройти мимо:

function processContact(contact) {
    processedContact = {};
    processedContact.params = {
        'contact[first_name]':contact.firstName,
        'contact[last_name]':contact.lastName,
        // ????????
    };
    for (each in contact.email) {
        // this can be used to produce the email.account values, but not the email.labels
    }
}

Если я наберу это статически, мое приложение Rails будет обрабатывать его правильно. Но дайте мне знать, если есть что-то лучшее, чтобы обработать его на стороне сервера, чтобы мне не пришлось создавать JSON вручную. Спасибо!

1 Ответ

1 голос
/ 09 июля 2011

Когда я перебираю contact.email, я получаю метки. Получение учетной записи - это просто вопрос возврата к первоначальному контактному хэшу, таким образом:

function processContact(contact) {
    processedContact = {};
    processedContact.params = {
        'contact[first_name]':contact.firstName,
        'contact[last_name]':contact.lastName,
    };
    var index = 0;
    for (label in contact.email) {
        processedContact.params['contact[emails_attributes]['+index+'][label]'] = label;
        processedContact.params['contact[emails_attributes]['+index+'][account]'] = contact[label];
        index++;
    }
    return processedContact;
}
...