Вам необходимо добавить логическое поле active
к рассматриваемому домену, чтобы рассматриваемый объект мог быть помечен как активный или неактивный. Вам также потребуется настроить действие удаления в соответствующем контроллере домена, чтобы объект не удалялся, потому что вместо удаления вам просто нужно изменить логическое значение active
на false
. Затем в действии списка соответствующего контроллера домена вам придется отфильтровать все неактивные объекты, прежде чем перечислять их.
UPDATE:
См. Код ниже для простого объяснения того, что я предлагаю.
//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]
}