Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Grails(归档概念)中,如何从列表中而不是数据库中删除项?_Grails_Groovy - Fatal编程技术网

在Grails(归档概念)中,如何从列表中而不是数据库中删除项?

在Grails(归档概念)中,如何从列表中而不是数据库中删除项?,grails,groovy,Grails,Groovy,我是grails新手,我尝试在grails中实现归档。也就是说,当我尝试从列表中删除一个项目时,它必须在列表中删除,但不能在数据库中删除。在数据库中,一个标志将出现在列表中已删除的项目上。 请指导我解决此问题。您需要在相关域中添加一个活动布尔字段,以便将相关对象标记为活动或非活动。您还必须在相应的域控制器中自定义删除操作,以便不删除该对象,因为您只想将活动布尔值更改为假。然后在相应域控制器的列表操作中,您必须在列出所有非活动对象之前过滤掉它们 更新: 关于我的建议,请参见下面的代码 //The

我是grails新手,我尝试在grails中实现归档。也就是说,当我尝试从列表中删除一个项目时,它必须在列表中删除,但不能在数据库中删除。在数据库中,一个标志将出现在列表中已删除的项目上。
请指导我解决此问题。

您需要在相关域中添加一个
活动
布尔字段,以便将相关对象标记为活动或非活动。您还必须在相应的域控制器中自定义删除操作,以便不删除该对象,因为您只想将
活动
布尔值更改为
。然后在相应域控制器的列表操作中,您必须在列出所有非活动对象之前过滤掉它们

更新:

关于我的建议,请参见下面的代码

//The User domain class
class User {
    String username
    boolean active = true    
}

//The delete action of the User controller
def delete = {
        def userInstance = User.get(params.id)
        if (userInstance) {
            //Here instead of deleting the user, we just mark the user as inactive.
            userInstance?.active = false
            //You may choose to change this message to something that indicates the user is
            //now inactive instead of deleted since the user is not really being deleted.
            flash.message = "${message(code: 'default.deleted.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
            redirect(action: "list")
        }
        else {
                flash.message = "${message(code: 'default.not.found.message', args: [message(code: 'user.label', default: 'User'), params.id])}"
                redirect(action: "list")
        }
}   

//The list action of the User controller
def list = {
        def users = User.findAll("from User as users where users.active=false")
        //Instead of writing "userInstance: User.list()" I filtered out all inactive users
        //and created the "users" object then wrote "userInstance: users". Build in other
        //parameters as you see fit.
        [userInstanceList: users]    
}

谢谢你的回复。请你用例子解释一下好吗?有没有关于这个问题的例子或文档?搜索术语“软删除”而不是过滤每个查询,你可以使用hibernate筛选器()自动过滤所有查询。请注意,您需要使用findById()而不是get(),因为get()不遵守hibernate筛选器。或者您也可以像typoknig对list所做的那样重写get()函数。不确定这是否可行。@Brad Rhoads这是一个选项,但使用该过滤器的过程似乎比它的价值更麻烦。如果它是一个对象,我需要在许多不同的情况下进行过滤,我只需要为它编写一个服务。代码更少,您不必在Grails之外工作。