Наличие одного класса в одном из двух отношений «один ко многим» (например, «Комментарии к видео» или «Изображение») в Grails? - PullRequest
2 голосов
/ 01 февраля 2012

Я строю пример, в котором существуют модели домена Video и Image. Каждый из них имеет отношение «один ко многим» с моделью «Комментарий» следующим образом:

package commentstest

class Video {

    static constraints = {
        embeddUrl(blank:false,nullable:false,url:true)
    }

    String embeddUrl

    static hasMany = [comments:Comment]
}

и

package commentstest

class Image {

    static constraints = {
        fileName(blank:false,nullable:false)
    }

    String fileName

    static hasMany = [comments: Comment]
}

и, наконец, класс Comment

package commentstest

class Comment {

    static constraints = {
        body(blank:false,nullable:false)
    }

    String body

    static belongsTo = [image:Image, video:Video]
}

Теперь проблема, с которой я сталкиваюсь, заключается в том, что когда я создаю «комментарий», его можно добавить к видео или к изображению. В настоящее время строительные леса заполняют как изображение, так и видео, и не дают возможности оставить пустым одно из этих полей.

У кого-нибудь есть идеи, как это сделать? Я уверен, что мои проблемы возникают из очереди:

static belongsTo = [image:Image,video:Video]

Но я не знаю, как указать, что он должен принадлежать одному ИЛИ другому. не оба.

1 Ответ

2 голосов
/ 01 февраля 2012

Судя по тому, что я мог видеть и понимать, вы говорите, что static belongsTo = [image:Image,video:Video] является коренной причиной.

Что вам нужно сделать, это добавить что-то вроде этого в ваши ограничения в комментарии

   static constraints = {
        fileName(blank:false,nullable:false)
        image(nullable:true)
        video(nullable:true)
    }

Это позволяет вам установить видео или изображение.

Надеюсь, что это hepls!

...