Grails:删除所有关联的对象

时间:2010-11-22 19:59:37

标签: java grails associations gorm

可以使用我的应用程序中的html select元素选择m:n关系的相关对象(也可以是复选框列表)。如果在编辑表单中取消选择所有相关对象,则应清除相关对象的对象列表。使用脚手架代码时,只有至少有一个相关对象仍然有效。

示例:

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 个答案:

答案 0 :(得分:2)

我认为您可能遇到的问题是,当在选择框中选择项目或通过复选框选择项目时,没有数据返回请求控制器。如果您希望能够从关联中删除所有对象,则需要在表单中添加一个额外的隐藏字段。

例如,如果某个产品有多个类别,请添加以下内容:

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

除了通常的select

您可以为控制器编写测试,以确保所需的功能符合预期。