0

je l'objet javascript suivant contenant une propriété email multi-valeur:Construire JSON multi-valeur pour Rails

var contact = { 
    email =  { 
     home =   (
      "[email protected]" 
     ); 
     work =   (
      "[email protected]" 
     ); 
    }; 
    emailCount = 2; 
    firstName = Micah; 
    lastName = Alcorn; 
} 

Et je dois construire le JSON ci-dessous pour envoyer à un serveur Rails:

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

Je ne sais pas comment aller au-delà de ce qui suit:

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 
    } 
} 

Si je tape ce statiquement, m L'application y Rails le gère correctement. Mais laissez-moi savoir s'il est préférable de le gérer côté serveur pour ne pas avoir à construire manuellement le JSON. Merci!

Répondre

1

Lorsque je parcours le contact.email, j'obtiens des étiquettes. Obtenir le compte est tout simplement une question de retourner à la Hash de contact d'origine, ainsi:

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; 
} 
+0

Dans mon cas particulier d'utilisation, je devais changer la dernière param à 'processedContact.params [ « [la emails_attributes] [ » + index + '] [compte]'] = contact.email [label] .toString(); '. Merci beaucoup! –

Questions connexes