可能在黑暗中拍摄,但希望有人知道:
我使用最新的Grails Taggable插件v1.1.0和Grails 2.5
在我的控制器中我有两个动作:
def addGroupTag(String tag, Long membershipId) {
def groupMembership = GroupMembership.findById(membershipId)
groupMembership.addTag(tag)
}
def removeGroupTag(String tag, Long membershipId) {
def groupMembership = GroupMembership.findById(membershipId)
groupMembership.removeTag(tag)
}
}
我可以将标签和membershipId发送到addGroupTag,并且在调用addTag之后添加标签没有问题。我发送相同的参数后删除GroupTag并没有任何反应。 removeTag肯定被调用,但没有任何反应,没有错误消息,没有从标记或tag_link表中移除,nada。
任何指针都会非常感激
修改
所以我看了一下这个插件,我发现了这个方法,它是这样的:
for(domainClass in application.domainClasses) {
if(Taggable.class.isAssignableFrom(domainClass.clazz)) {
domainClass.clazz.metaClass {
---- various others such as addTag ----
removeTag { String name ->
if(delegate.id == null) throw new TagException("You need to save the domain instance before tagging it")
if (!Tag.preserveCase) {
name = name.toLowerCase()
}
def criteria = TagLink.createCriteria()
def instance = delegate
def link = criteria.get {
tag {
if (!Tag.preserveCase) {
eq 'name', name
} else {
ilike 'name', name
}
}
eq 'tagRef', instance.id
eq 'type', GrailsNameUtils.getPropertyName(instance.class)
cache true
}
link?.delete()
return delegate
}
现在,如果我将link?.delete()
更改为link?.delete(flush:true)
,那么它会删除TagLink表中的条目,这是奇怪的但是向前迈出一步,因为就我的groupMembership实例而言,这意味着标签不复存在。但是,每次删除标签时,我都不想刷新会话,那是什么意思?此外,如果没有链接,我会假设实际的标签实例也会被删除,因为据我所知他们只会永远坐在那里..