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/