У меня есть приложение со следующими лицами:критерии в отношении между субъектами - Grails
Тема:
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]
Спасибо. Это не работает отлично. Он показывает только те темы с активным тестом, поэтому: «[['English', 2], ['Spanish', 1]]'. ** Немецкая тема ** отсутствует в списке. –
ОК, я исправил нулевую проблему. Проблема в том, что когда нет связанного теста, 't.active' становится null, что приводит к сбою условия. Так что нулевая проверка исправит это. –
Проблема продолжается. Темы без активного теста не отображаются. Если раздел проецирования опущен, в нем отображаются только две темы; третий не появляется (немецкий). –