我创建了 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)
}
但是,如果标签为空,这将引发异常。换句话说,如果我删除所有标签,保存失败。