Grails GORM web流通过hasMany引用进行迭代



我对Grails还是比较陌生的。我正在开发一个在线调查。我不断遇到网络流的问题,我似乎无法在网络上找到解决方案。我有一个课堂调查,有很多主题,有很多问题。在我的网络流中,主题和问题的数量是动态的,这取决于你选择的调查。我的问题是,你如何(在网络流中)迭代每个主题和问题(有点像arrray或列表),我可以获取特定的主题和问题,并将它们设置为流变量。例如,我会给我的调查和主题课:

class Survey implements Serializable {
List topic
String surveyName
float version
static hasMany = [topic:Topic]
static constraints = {
    surveyName (blank:false)
}
}

和主题:

class Topic implements Serializable {
List primaryQuestion
String topicName
static belongsTo = [survey:Survey]
static hasMany = [primaryQuestion:PrimaryQuestion]

static constraints = {
    topicName (blank:false)
}
}

所以我设置了流量变量

    onStart {
        flow.survey = Survey.get(params.id)
    }

那么,我如何在控制器中获取每个单独的主题和问题呢?我的目标是让一个视图用"下一个"one_answers"上一个"来表示每个问题。根据我对web流的理解,我知道这是可能的。我只是不知道如何将一个问题传递给视图,而不是同时迭代所有问题。

如果我正确理解你的问题,那么你所需要做的就是迭代你的列表。首先,小费;在大多数情况下,您不需要将模型推入流范围。您可以简单地执行以下操作:

onStart {
  [survey : Survey.get(params.id)]
}

然后在你看来:

<g:each in="${survey.topic}" var="topic">
  <g:each in="${topic.primaryQuestion}" var="question">
     ...
  </g:each>
</g:each>

另一个提示是,将主题重命名为调查域中的主题,将primaryQuestion重命名为主题中的primaryQuestions。这样更有意义。

如果我离这里很远,你可能需要编辑你的问题,让它更清楚一点。

我通过GORM文档终于弄明白了。这就是我想要的:

flow.topics = flow.survey ? Topic.findAllBySurvey(flow.survey) : []

这将调查中的所有主题放在一个列表中,我可以使用来获取每个主题

onEntry{
    flow.topic = flow.topics.get(i)
}

再次感谢您的回复。

最新更新