Grails один-ко-многим / ошибочно удаляет все "manys" - PullRequest
0 голосов
/ 09 февраля 2012

у меня есть следующие (упрощенные) классы домена

class Filter {
    String name
    static hasMany = [answers:Answer]
    static belongsTo = [user:User]
}

class User {
    String name
    static hasMany = [answers:Answer, filters:Filter]
}

class Answer {
    String text
}

Затем я добавляю ответы пользователю, который работает отлично.Проблема возникает, когда я удаляю 1 ответ пользователя:

def delete = {
    def answer = Answer.get(params.id)
    def users = User.withCriteria() {
        answers{
            eq("id", answer.id)
        }
    }

    for (user in users)
        user.removeFromAnswers(answer)

    answer.delete(flush:true)
    redirect(action:"index")
}

Здесь происходит то, что ВСЕ пользователь -> ассоциации ответов удаляются.

Я хочу удалить только этот 1 ответ, и, поскольку во всех ассоциациях этот ответ используется.

Я знаю, что это связано с отсутствующим принадлежащим, но я не могу использовать его, потомуansswer может принадлежать как пользователю, так и фильтру ...

1 Ответ

0 голосов
/ 10 февраля 2012

Вы можете добавить belongsTo, чтобы установить для них nullable:

class Answer {
    String text

    static belongsTo = [user:User, filter:Filter]
    static constraints = {
        user nullable:true
        filter nullable:true
    }
}

, а затем просто удалить Answer непосредственно в контроллере:

def delete = {
    def answer = Answer.get(params.id)
    answer.delete(flush:true)
}

GORMпозаботится обо всем остальном каскадное для вас.

...