在Grails中添加,更新和删除关联的类

时间:2014-04-14 12:12:23

标签: grails has-many belongs-to

我有以下关系:

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。

1 个答案:

答案 0 :(得分:0)

尝试添加

 static mapping = {
        ips cascade: 'all-delete-orphan'
 }

主机类。有关详情,请参阅http://grails.org/doc/latest/ref/Database%20Mapping/cascade.html使用此配置,如果从作者图书协会中删除(孤立)图书,也会删除图书。