0

我创建了 2 个名为 Asset 和 Tag 的域类。资产可以有很多标签

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

// Tag.groovy
class Tag {
    static belongsTo = Asset
    String word
}

标签被输入到视图中的文本字段中,每个标签用逗号分隔。

提交 Asset 表单时,AssetController 将用于Tag.findOrSaveWhere创建新标签或Asset.addToTag

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

所有这些都很好,但是如果用户更新并删除了标签,我会尝试从资产中删除标签。

如何在更新时删除标签?

编辑通过采取删除所有标签然后尝试保存资产实例的旧方法,我对此有了更进一步的了解。

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

但是,如果标签为空,这将引发异常。换句话说,如果我删除所有标签,保存失败。

4

1 回答 1

0

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

我的最终结果是我的以下块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)
}
于 2012-07-19T18:09:58.110 回答