GORM - 将child添加到parent并保存为groovy.lang.MissingMethodException

Jim*_*mmy 6 grails groovy grails-orm grails-2.0

这是我的域名模型,调查有很多问题,每个问题都有很多回复:

class Survey {

    String name
    String customerName
    static hasMany = [questions: SurveyQuestion]

    static constraints = {
    }
}

class SurveyQuestion {

    String question

    static hasMany = [responses : SurveyQuestionResponse]
    static belongsTo = [survey: Survey]

    static constraints = {
    }
}

class SurveyQuestionResponse {

    String description
    static belongsTo = [question: SurveyQuestion]

    static constraints = {
    }
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中,我有一个方法,它接收调查的ID,查找它,然后从另一个请求参数构建一个问题,尝试将问题添加到调查并保存:

def addQuestion =
    {
        def question = new SurveyQuestion(question:params.question)
        def theSurvey = Survey.get(params.id)

        theSurvey.addToQuestions(question) //fails on this line
        theSurvey.save(flush:true)

        redirect(action: showSurvey, params:[id:theSurvey.id])
    }
Run Code Online (Sandbox Code Playgroud)

但是,它失败并返回:

方法的无签名:)roosearch.Survey.addToQuestions(为参数类型是适用的:(roosearch.SurveyQuestion)值:[roosearch.SurveyQuestion:空]可能的解决方案:addToQuestions(java.lang.Object中),getQuestions()

我不太明白我在这里做错了什么,我已经尝试了各种替代方法来创建问题,甚至用文字字符串手动实例化一个,但它总是给出相同的错误.

有人可以告诉我吗?

谢谢

alc*_*day 0

(我没有足够的观点来发表评论,所以我会“回答”)。

首先,它看起来确实“不错”。

我学会了从表面上看待错误消息。由于某种原因,它认为“问题”为空。我猜您可以插入一些日志记录,然后发现事实并非如此。

此时,我会先尝试保存问题,查看它是否正确保存并获得分配和 ID,然后调用 addToQuestions。