У меня есть приложение со следующими объектами:
Тема:
class Topic {
UUID id
String description
String name
boolean visibility = true
// Relation
static hasMany = [tests:Test]
...
}
Тест:
class Test {
UUID id
boolean active = true
String description
...
static hasMany = [evaluationsTest: Evaluation]
static belongsTo = [topic: Topic, catalog: Catalog]
}
Когда я показываю пользователю все видимые темы, я запрашиваю запрос:
def visibleTopics = Topic.findAllByVisibility(true, [sort:"name", order:"asc"])
Этот запрос возвращает меня, например: [['English'], ['Spanish']]
. Затем я могу показать пользователю полную информацию о каждой теме.
Но я также хочу указать пользователю количество активных тестов в каждой видимой теме.
Например:
English topic has 2 active test.
Spanish topic has a total of 2 test. One is active and the other is not.
German topic has not any active test.
Затем мне нужен запрос, результатом которого будет: def activeTotalEachTopic = [[2],[1],[0]]
, и я могу передать переменную activeTotalEachTopic
в представление (.gsp).
Решение:
Из первого запроса, где я могу получить все видимые темы, я получаю номер активного теста.
def visibleTopics = Topic.findAllByVisibility(true, [sort:"name", order:"asc"])
def numberActiveTest = []
activeTopics.each { topic ->
def result = Test.findAllByTopicAndActive(topic, true).size()
numberActiveTest.push(result)
}
И я передаю в представление обе переменные.
render view: 'home', model: [activeTopics: activeTopics, numberActiveTest: numberActiveTest]