2012-07-18 68 views
0

我创建了两个名为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) 
} 

所有工作得非常好,但我想主要从资产,如果除去标签用户更新并删除标签。

如何在更新时删除标签?

编辑通过采用旧的方法删除所有标签然后尝试保存Asset实例,我已经进一步了解了这一点。

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

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

回答

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) 
}