Handhabung von Parametern aus dynamischen Formularen für Eins-zu-Viele-Beziehungen in Grails

Meine Hauptfrage hier ist die Behandlung der Pramas-Map, wenn eine Eins-zu-Viele-Beziehung in einem dynamischen Formular verwaltet wird, sowie Best Practices für den Umgang mit Eins-zu-Vielen, wenn ein Domänenobjekt über das dynamische Formular bearbeitet / aktualisiert wird . Die Eingaben für meine Fragen lauten wie folgt:

Ich habe es geschafft, ein Formular zu hacken, mit dem ich die unten gezeigten Domänenobjekte in einem dynamischen Formular erstellen kann, da es keinen Sinn macht, ein separates Formular zum Erstellen von Telefonnummern und anschließenden Zuweisen zu einem Kontakt zu haben erstelle einfach alles in einer form in meiner anwendung. Es ist mir gelungen, etwas zu implementieren, das dem entspricht, was ich in meinem @ gefragt habVorherige Frage (Danke für die Leute, die mitgeholfen haben)

class Contact{

    String firstName
    String lastName
    // ....
    // some other properties
    // ...

    static hasMany = [phones:Phone]
    static mapping = {
        phones sort:"index", cascade: "all-delete-orphan"
    }
}

class Phone{
    int index
    String number
    String type
    Contact contact

    static belongsTo = [contact:Contact]
}

Ich habe es im Grunde genommen geschafft, die Werte aus der 'params'-Map zu holen und sie selbst zu analysieren und das Domain-Objekt und die Zuordnung manuell zu erstellen. Das heißt Ich habe nicht die gleiche Logik verwendet, die im Standardgerüst verwendet wird, d. h.

Contact c = new Contact(params)

etc ...., ich habe gerade alle Parameter durchlaufen und meine Domain-Objekte von Hand erstellt und gespeichert, und alles funktioniert gut.

Mein Controller verfügt über Codeblöcke, die so aussehen (diese sind reduziert, um nur einen Punkt anzuzeigen).

//create the contact by handpicking params values
def cntct = new Contact()
cntct.firstName = params.firstName
cntct.lastName = params.lastName
//etc...

//get array of values for number,type
def numbers = params['phone.number']
def types =  params['phone.type']

//loop through one of the arrays and create the phones
numbers.eachWithIndex(){ num, i ->
    //create the phone domain object from 
    def phone = new Phone()
    phone.number = num
    phone.type = types[i]
    phone.index = i
    cntct.addToPhones(phone)
}

//save

Meine Fragen lauten wie folgt:

Was ist die beste Methode, um mit einer solchen Situation umzugehen? Würde die Verwendung von Befehlsobjekten in diesem Fall funktionieren? Wenn ja, wo kann ich weitere Informationen dazu finden? Alle Beispiele, die ich während meiner Suche gefunden habe, befassen sich mit Eins-zu-Eins-Beziehungen. Ich konnte kein Beispiel für eins zu viele finden?Was ist in diesem Fall der beste Weg, um mit den relatiohsips der Telefone umzugehen, um Telefone beim Bearbeiten des Kontaktobjekts hinzuzufügen / zu entfernen. Ich meine, die Erstellungslogik ist einfach, da ich beim Speichern immer neue Telefone erstellen muss, aber beim Aktualisieren eines Kontakts hat der Benutzer möglicherweise ein Telefon entfernt und / oder ein bestehendes bearbeitet und / oder einige neue Telefone hinzugefügt. Im Moment lösche ich einfach alle Telefone, die ein Kontakt hat, und erstelle sie gemäß den Angaben im Formular neu. Ich bin jedoch der Meinung, dass dies nicht der beste Weg ist Einsen und Vergleichen mit den angegebenen Werten und Ausführen eines manuellen Diffs ist der beste Weg, dies zu tun. Gibt es eine bewährte Methode, um damit umzugehen?

Danke, hoffentlich sind die Fragen klar.

[edit] Nur um mehr Informationen zu erhalten, können Telefoninformationen mit Javascript (jquery) innerhalb des Formulars dynamisch hinzugefügt und gelöscht werden. [/ edit]

Antworten auf die Frage(8)

Ihre Antwort auf die Frage