Grails更新而不是删除

时间:2012-01-07 09:04:49

标签: grails gorm grails-controller

Grails中是否有一种简单的方法可以不允许删除任何域类?而且每个域中都有一个删除标志,只要删除了某些内容就会更新。

另外,实际上所有list / show方法都不应该显示delete flag为true的对象。

我知道我可以通过手动编辑所有控制器中的所有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() ]
}

1 个答案:

答案 0 :(得分:11)

您必须覆盖所有域类的删除和列表方法。将这样的代码添加到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 = {}
}