在Grails中实现删除功能的正确方法?

时间:2016-11-06 09:27:54

标签: grails

我有一个类似

的删除方法

控制器方法

def deletemap(Long id){


    try {

        mapService.deleteMap(id)

    }
    catch (ValidationException e) {


        flash.message = "Sorry an error occured when deleting map!!"

        redirect(action: "maps", id: event.id)

        return


    }


    flash.message = "Map was deleted!!"

    redirect(action: "maps", id: event.id)

    return


}

控制器方法调用服务方法,如下所示:

服务方法

def deleteMap(id){


    def map = Map.get(id)



    if(map == null){

            throw new org.springframework.security.access.AccessDeniedException("Id doesn't exist!!!")
            return
    }



    map.delete(flush: true)

}

我的目标是尽可能完善此功能。我目前正在编写一些测试,并且想知道我是否应该在map.delete(flush:true)失败时处理测试中的情况。当这个gorm调用失败时会出现这种情况吗?我感谢任何帮助!谢谢!

1 个答案:

答案 0 :(得分:1)

干净利落的方式:

<强>控制器

def deletemap(Long id){

    Map mapInstance = Map.get(id)

    if (!mapInstance) {
        flash.message = "Map not found"
    }
    else {
        mapService.deleteMap(mapInstance)
        flash.message = "Map was deleted!!"
    }

    redirect(action: "maps")
}

<强>服务

def deleteMap(Map mapInstance){
    map.delete(flush: true)
}

如果Map与其他域有关系,则会失败;在这种情况下,您需要验证关系是否存在并删除该关系或告诉您的用户关系阻止删除。但这取决于您的域名设计。