Grails получить любого из детей в hasMany - PullRequest
6 голосов
/ 28 июня 2011

У меня есть класс домена, который имеет множество других классов домена. Я хочу кого-нибудь из детей, и мне все равно, кто. Пример

class MyDomainClass {
  static hasMany = [thingies:OtherDomainClass]
}

Я могу сделать это глупо, как:

def findOne
myInstance.thingies.each{
  findOne=it
}

Но есть ли лучший способ, как:

def findOne = myInstance.thingies.grabTheMostConvenientOne()

1 Ответ

9 голосов
/ 28 июня 2011

thingies - это коллекция, поэтому в вашем распоряжении все от Коллекция .

Простой способ сделать это:

def one = myInstance.thingies.asList().first()

Тем не менее, вы, вероятно, хотите убедиться, что в коллекции сначала есть несколько элементов.В документации явно не говорится, что first() генерирует исключение IndexOutOfBoundsException, если список пуст, но у меня есть ощущение, что это все еще возможно.Если это так, вы, вероятно, захотите:

def one = myInstance.thingies.size() > 0 ? myInstance.thingies.asList().first() : null

Или, если вы хотите быть очень лаконичным за счет некоторой читабельности, вы можете использовать этот подход ( любезно предоставлен John Wagenleitner) :

def one = myInstance.thingies?.find { true }
...