2011-06-27 13 views
6

Mam klasy domeny, która ma wiele innych klasy domeny. Chcę jednego z dzieci i nie dbam o to. PrzykładGrails pobiera którekolwiek z dzieci w hasMane

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

mogę to zrobić głupi sposób jak:

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

Ale czy istnieje lepszy sposób jak:

def findOne = myInstance.thingies.grabTheMostConvenientOne() 

Odpowiedz

9

thingies jest zbiorem, więc trzeba wszystko od Collection do Twojej dyspozycji.

prosty sposób można to zrobić:

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

Jednakże, prawdopodobnie chcesz, aby upewnić się, że kolekcja rzeczywiście ma pewne elementy pierwsze. Dokumentacja nie mówi jednoznacznie, że first() wyrzuca wyjątek IndexOutOfBoundsException, jeśli lista jest pusta, ale mam wrażenie, że nadal może. Jeśli to przypadek, prawdopodobnie chcesz:

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

Albo, jeśli chcesz być super-zwięzły kosztem pewnego czytelność, można użyć tego podejścia (courtesy John Wagenleitner):

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