这是我的域名模型,调查有很多问题,每个问题都有很多回复:
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 = {
}
}
在我的控制器中,我有一个方法,它接收调查的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])
}
然而,它失败并返回:
没有方法签名:roosearch.Survey.addToQuestions()是 适用于参数类型:(roosearch.SurveyQuestion)值: [roosearch.SurveyQuestion:null]可能的解决方案: addToQuestions(java.lang.Object),getQuestions()
我不太明白我在这里做错了什么,我已经尝试了各种替代方法来创建问题,甚至用文字字符串手动实例化一个,但它总是给出相同的错误。
有人可以告诉我吗?
由于
答案 0 :(得分: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])
}
答案 1 :(得分:0)
(我没有足够的评论意见,所以我会“回答”)。
首先,它确实看起来“OK”。
我已经学会了以面值的方式显示错误消息。出于某种原因,它认为“问题”是空的。我猜你可以插入一些日志记录,看看它不是。
此时,我会先尝试保存问题,看看它是否正确保存并获得分配和ID,然后调用addToQuestions。
答案 2 :(得分:0)
如果使用输入参数实际创建了SurveyQuestion,你可以尝试断言吗? 例如
assert question
后面
def question = new SurveyQuestion(question:params.question)
并按照#alcoholiday的建议尝试一些日志记录。 还是一个简单的
println params
可以快速浏览一下