マスター レコード ( VocabularyTest ) と一連の詳細レコード ( VocabQuestion ) を同じフォームに入力できる UI を作成しました。送信されたデータが正しいことをとてもうれしく思いますが、マスター レコードを保存しようとすると、次のエラーが表示されます。
null id in vocabularytest.VocabQuestion entry
編集 - 完全なスタックトレースは
null id in vocabularytest.VocabQuestion entry (don't flush the Session after an exception occurs). Stacktrace follows:
Message: null id in vocabularytest.VocabQuestion entry (don't flush the Session after an exception occurs)
Line | Method
->> 24 | save in vocabularytest.VocabularyController
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 195 | doFilter in grails.plugin.cache.web.filter.PageFragmentCachingFilter
| 63 | doFilter in grails.plugin.cache.web.filter.AbstractFilter
| 1110 | runWorker in java.util.concurrent.ThreadPoolExecutor
| 603 | run . . . in java.util.concurrent.ThreadPoolExecutor$Worker
^ 722 | run in java.lang.Thread
編集終了
Detail レコードの外部キー参照が null であるため、これが発生していると想定していますが、設定するために何もしていないため、それほど驚くことではありません。
私のコントローラーが受け取っているParamsは次のとおりです
title: Dave New Test
testItems[0].question: Q1
testItems[0].answer: A1
testItems[1].question: Q2
testItems[1].answer: A2
testItems[2].question: Q3
testItems[2].answer: A3
create: Create
私のドメインオブジェクトは
class VocabularyTest {
static hasMany = [testItems: VocabQuestion]
static constraints = {
}
String title;
List <VocabQuestion>testItems = LazyList.decorate(
new ArrayList(),
FactoryUtils.instantiateFactory(VocabQuestion.class));
}
class VocabQuestion {
static constraints = {
}
String question
String answer
VocabularyTest vocabularyTest
}
私のコントローラーの関連する方法は
def save() {
log.debug(params)
def vocabularyTestInstance = new VocabularyTest(params)
if (!vocabularyTestInstance.save(flush: true)) {
render(view: "create", model: [vocabularyTestInstance: vocabularyTestInstance])
return
}
flash.message = message(code: 'default.created.message', args: [message(code: 'vocabularyTest.label', default: 'VocabularyTest'), vocabularyTestInstance.id])
redirect(action: "index", id: vocabularyTestInstance.id)
}
GORM と Grails が常に苦労するようなことをしようとしているのですか、それとも重要な何かを見逃しているだけですか?