Grails: удалить все связанные объекты - PullRequest
0 голосов
/ 22 ноября 2010

Связанные объекты отношения m: n могут быть выбраны с помощью элемента выбора HTML в моем приложении (также может быть список флажков).Если все связанные объекты отменены в форме редактирования, список объектов связанных объектов должен быть очищен.С кодом скаффолда он работает, только если остается хотя бы один связанный объект.

Пример:

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?

Следуя документу Grails, я бы вызвал removeFrom* (противоположность addTo*) вдоменный объект для всех связанных объектов.Но для этого мне пришлось выяснить, какие объекты связаны между собой.Есть ли более простой способ очистить список связанных объектов?Будет ли правильно обрабатываться двунаправленное сопоставление, если список связанных объектов будет просто заменен пустым списком?

1 Ответ

2 голосов
/ 22 ноября 2010

Я думаю, что проблема, с которой вы можете столкнуться, заключается в том, что когда такой элемент выбран либо в поле выбора, либо с помощью флажков, то никакие данные не возвращаются с запросом к контроллеру.Если вы хотите иметь возможность удалить все объекты из ассоциации, вам нужно добавить в форму дополнительное скрытое поле.

Например, если существует продукт, имеющий много категорий, добавьте следующее:

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

отдельно от обычного select.

Вы можете написать тест для контроллера, чтобы убедиться, что желаемая функциональность работает так, как ожидалось.

...