2010-11-22 24 views
0

Les objets liés d'une relation m: n peuvent être sélectionnés avec un élément de sélection html dans mon application (peut également être une liste de cases à cocher). Si tous les objets associés sont désélectionnés dans le formulaire d'édition, la liste d'objets des objets connexes doit être effacée. Avec le code d'échafaudage, cela ne fonctionne que si au moins un objet associé reste.Grails: supprime tous les objets associés

Exemple:

class Book { 
    String name 
    static hasMany = [authors: Author] 
    belongsTo = Author 
} 

class Author { 
    String name 
    static hasMany = [books: Book] 
} 

def b1 = new Book(name: "B1").save() 
def b2 = new Book(name: "B2").save() 
def author = new Author(name: "Stephen").addToBooks(b1).addToBooks(b2).save() 

// How to remove all books from the author? 

Après la Grails doc j'appeler removeFrom* (à l'opposé de addTo*) sur l'objet de domaine pour tous les objets associés. Mais pour ce faire, je devais comprendre, quels objets sont liés. Existe-t-il un moyen plus simple d'effacer la liste des objets associés? L'association bidirectionnelle serait-elle gérée correctement, si la liste des objets liés serait simplement remplacée par une liste vide?

Répondre

2

Je pense que le problème que vous pouvez rencontrer est que lorsque l'élément est sélectionné dans la zone de sélection ou via les cases à cocher, aucune donnée ne revient avec la demande au contrôleur. Si vous voulez pouvoir supprimer tous les objets de l'association, vous devez ajouter un champ caché supplémentaire au formulaire.

Par exemple, s'il y a un produit qui a de nombreuses catégories ajouter ce qui suit:

<g:hiddenField name="categories" value=""/> 

en dehors de la select habituelle.

Vous pouvez écrire un test pour le contrôleur pour vous assurer que la fonctionnalité souhaitée se comporte comme prévu.