Grails “如何删除自由格式”;标签;来自域类?

Grails “如何删除自由格式”;标签;来自域类?,grails,Grails,我创建了两个名为Asset和Tag的域类。资产可以有许多标记 // Asset.groovy class Asset { static hasMany = [tags: Tag] } // Tag.groovy class Tag { static belongsTo = Asset String word } 标签输入视图中的textfield中,每个标记都用逗号分隔 提交资产表单时,资产控制器将使用Tag.findorsavehere创建新标签或Asset.add

我创建了两个名为Asset和Tag的域类。资产可以有许多标记

// Asset.groovy
class Asset {
    static hasMany = [tags: Tag]
}

// Tag.groovy
class Tag {
    static belongsTo = Asset
    String word
}
标签输入视图中的textfield中,每个标记都用逗号分隔

提交资产表单时,资产控制器将使用
Tag.findorsavehere
创建新标签或
Asset.addToTag

def tags_list = params?.tags?.split(",")
tags_list.each {
    def tag = Tag.findOrSaveWhere(word: it.trim())
    assetInstance.addToTags(tag)
}
所有这些都非常有效,但是如果用户更新并删除了标记,我将尝试从资产中删除标记

如何在更新时删除标记

EDIT我采用了一种旧方法,删除所有标记,然后尝试保存资产实例,从而进一步改进了这一点

assetInstance.tags.clear()
def tags_list = params?.tags?.split(",")
tags_list.each {
    def tag = Tag.findOrSaveWhere(word: it.trim())
    assetInstance.addToTags(tag)
}

但是,如果标记为null,则会引发异常。换句话说,如果我删除了所有标签,保存就会失败。

解决了我的问题。在更新操作中清除标记是正确的做法,但我必须注意表单中的空标记字符串

我的最终结果是我的
AssetController

assetInstance.tags.clear()
def tags_list = params?.tags?.split(",")
tags_list.each {
def tag = Tag.findOrSaveWhere(word: it.trim())
if (tag.id != null) // to prevent null id exceptions
    assetInstance.addToTags(tag)
}