7

これは私のドメイン モデルです。調査には多くの質問があり、各質問には多くの回答があります。

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 = {
    }
}

私のコントローラには、Survey の ID を取得して検索し、別のリクエスト パラメータから質問を作成し、その質問を Survey に追加して保存しようとするメソッドがあります。

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])
    }

ただし、失敗し、これを返します。

メソッドの署名はありません: roosearch.Survey.addToQuestions() は引数の型に適用できます: (roosearch.SurveyQuestion) 値: [roosearch.SurveyQuestion : null] 可能な解決策: addToQuestions(java.lang.Object)、getQuestions()

ここで何が間違っているのかよくわかりません。質問を作成するさまざまな代替方法を試してみましたが、リテラル文字列を使用して手動でインスタンス化することもできましたが、常に同じエラーが発生します。

誰でも私にアドバイスできますか?

ありがとう

4

3 に答える 3

1

問題は、「質問」が保存されていないため、まだデータベースにないことです。最初に「質問」を保存してから、アンケートに追加してみてください。このようなもの:

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

        theSurvey.addToQuestions(question)
        theSurvey.save(flush:true)

        redirect(action: showSurvey, params:[id:theSurvey.id])
    }
于 2015-05-06T13:14:00.517 に答える
0

(コメントするのに十分なポイントがないので、「回答」します)。

まず、「OK」に見えます。

エラーメッセージを額面どおりに受け取ることを学びました。どういうわけか、「質問」はヌルだと思い込んでいます。ロギングを挿入して、そうではないことを確認できると思います。

この時点で、最初に質問を保存してみて、正しく保存され、ID が割り当てられていることを確認してから、addToQuestions を呼び出します。

于 2013-08-03T01:21:22.943 に答える