Как удалить элемент из списка, а не из базы данных в Grails (концепция архива)? - PullRequest
1 голос
/ 01 ноября 2011

Я новичок в Grails, я пытаюсь реализовать архив в Grails. То есть, когда я пытаюсь удалить элемент из списка, он должен удалить в списке, но не в базе данных. А в базе данных флаг будет отображаться на удаленном элементе в списке. Пожалуйста, помогите мне решить эту проблему.

1 Ответ

3 голосов
/ 01 ноября 2011

Вам необходимо добавить логическое поле 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]    
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...