可以使用我的应用程序中的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*
相反)。但要做到这一点,我必须弄清楚,哪些对象是相关的。有没有更简单的方法来清除相关对象列表?如果相关对象列表只是被空列表替换,那么双向关联是否会被正确处理?
答案 0 :(得分:2)
我认为您可能遇到的问题是,当在选择框中选择项目或通过复选框选择项目时,没有数据返回请求控制器。如果您希望能够从关联中删除所有对象,则需要在表单中添加一个额外的隐藏字段。
例如,如果某个产品有多个类别,请添加以下内容:
<g:hiddenField name="categories" value=""/>
除了通常的select
。
您可以为控制器编写测试,以确保所需的功能符合预期。