我有以下关系:
class Host {
static hasMany = [ips: HostIp, groups: HostGroup]
static belongsTo = [HostGroup]
String dns
}
class HostIp {
static belongsTo: [host: Host]
String ip
}
class HostGroup {
static hasMany = [ hosts: Host ]
String name
}
我在GSP中有一个允许主机版本的表单。我有一个动态添加 - 编辑 - 删除列表来添加,编辑和删除新的和当前的主机IP,所以如果主机最初有两个IP(ip1和ip2),但删除了ip1,则将ip2修改为ip3并添加ip4,这些数据被发送到控制器:
原始数据显示在表格中:
ips[0].id = 8
ips[0].ip = ip1
ips[1].id = 9
ips[1].ip = ip2
提交时发送的数据:
ips[1].id = 9
ips[1].ip = ip3
ips[2].ip = ip4
这意味着,当ip1被删除时,它的id或ip都没有被发送(它的字段被从表单中删除),并且发送了一个新的ip4(添加了新的动态字段),没有id,因为它没有'还存在。因此,在执行bindData(host, params)
,然后save()
时,ip2将更新为ip3,并且会创建ip4,但不会删除ip1。这是bindData
的正常行为吗?如果没有,这会被迫吗?
我会在另一篇文章中询问小组关系...
提前致意并表示感谢。
使用grails 2.3.7。
答案 0 :(得分:0)
尝试添加
static mapping = {
ips cascade: 'all-delete-orphan'
}
到主机类。有关详情,请参阅http://grails.org/doc/latest/ref/Database%20Mapping/cascade.html(使用此配置,如果从作者图书协会中删除(孤立)图书,也会删除图书。)