如何从域类中删除自由格式“标签”?

时间:2012-07-18 17:44:06

标签: grails

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

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

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

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

提交资产表单后,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)
}

但是,如果Tags为null,则会抛出异常。换句话说,如果我删除所有标签,则保存失败。

1 个答案:

答案 0 :(得分: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)
}