Grails 更新而不是删除

标签 grails grails-orm grails-controller

Grails 中是否有一种简单的方法不允许删除任何域类?而是在每个域中都有一个删除标志,每当删除某些内容时该标志就会更新。

此外,实际上所有列表/显示方法都不应该显示删除标志为 true 的对象。

我知道我可以通过手动编辑所有 Controller 中的所有 CRUD 方法来做到这一点,但是在使用 Grails 时,这似乎有点太多了,因为一切都可以通过在某处更改一些标志来完成!

我常用的列表方法如下所示,我的项目中几乎所有列表方法都允许用户访问只属于用户公司的东西。

def list = {
    params.max = Math.min(params.max ? params.int('max') : 10, 100)
    def documentsList = Documents.createCriteria().list(params){
        eq("company.id",session.companyId)  
        maxResults(params.max)
        order("dateCreated","desc")
        //firstResult(params.offset)
    }
    [documentsInstanceList: documentsList , documentsInstanceTotal: documentsList.getTotalCount() ]
}

最佳答案

您必须重写所有域类的删除和列出方法。将这样的代码添加到您的 Bootstrap

class BootStrap {

  def grailsApplication

  def init = { servletContext ->

  for (dc in grailsApplication.domainClasses) {

     dc.clazz.exists(-1);  //to register meta class

     def gormSave = dc.clazz.metaClass.getMetaMethod('save');         
     dc.clazz.metaClass.delete = {  ->
        delegate.deleted = true
        gormSave.invoke delegate
     }

     dc.clazz.metaClass.delete = { Map args  ->
        delegate.deleted = true
        gormSave.invoke(delegate, args)
     }

     dc.clazz.metaClass.static.list = {  ->
        def crit = delegate.createCriteria();
        def list = crit.list{
          eq('deleted', false)
        }
        return list;
     }



  }
}

   def destroy = {}
}

关于Grails 更新而不是删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8768534/

相关文章:

grails - 由于缺少默认c'tor,bean的实例化失败

grails - 升级到 Grails 2.4.4 的问题

grails - 如何解析、持久化和检索带有以空格分隔的标签的字符串?

grails - 我可以创建一个自定义条件查询吗

mongodb - Grails Mongo GORM 插件 - float 和字节的映射是字符串而不是数字

grails - 如何在grails 2.5.6中的运行时异常期间隔离单个delete(..)使其不回滚?

grails - 测试资源 Controller 的 UrlMapping 路径

grails - Groovy中变量的继承

grails - 使用复合 key 进行Grails验证

Grails 2.3.4 数据库 View 作为域类