在Grails中添加、更新和删除关联类
我有以下关系:在Grails中添加、更新和删除关联类,grails,has-many,belongs-to,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 ]
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,则添加了修改为ip3和ip4的ip2,此数据将发送到控制器:
表格中显示的原始数据:
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
的正常行为吗?若否,可否强制
我将在另一个帖子中询问组关系
提前问候和感谢
使用Grails2.3.7。尝试添加
static mapping = {
ips cascade: 'all-delete-orphan'
}
到主机类。有关更多信息,请参见(使用此配置,如果从作者的图书协会中删除(孤立)一本书,它也将被删除。)我认为bindData不会删除未映射的记录。如果可行的话,实现所需目标的一个糟糕方法是清除所有内容并每次用新数据重新编写关联。