可以使用我的应用程序中的 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*
相反)。但要做到这一点,我必须弄清楚哪些对象是相关的。有没有更简单的方法来清除相关对象的列表?如果相关对象列表简单地被空列表替换,双向关联是否可以正确处理?
最佳答案
我认为您可能遇到的问题是,当在选择框中或通过复选框选择该项目时,没有数据随 Controller 的请求返回。如果您希望能够从关联中删除所有对象,您需要向表单添加一个额外的隐藏字段。
例如,如果产品有多个类别,请添加以下内容:
<g:hiddenField name="categories" value=""/>
除了通常的选择
。
您可以为 Controller 编写测试,以确保所需的功能按预期运行。
关于java - Grails:删除所有关联的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4249660/