Grails “如何删除自由格式”;标签;来自域类?
我创建了两个名为Asset和Tag的域类。资产可以有许多标记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.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)
}