2011-06-27 13 views
6

Tôi có một lớp miền có nhiều lớp miền khác. Tôi muốn có một đứa trẻ và không quan tâm. Ví dụGrails nhận được bất kỳ trẻ em nào trong một hasMany

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

tôi có thể làm việc này một cách ngu ngốc như:

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

Nhưng có một cách tốt hơn như:

def findOne = myInstance.thingies.grabTheMostConvenientOne() 

Trả lời

9

thingies là một Bộ sưu tập, vì vậy bạn có tất cả mọi thứ từ Collection theo ý của bạn.

Một cách đơn giản bạn có thể làm điều này là:

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

Tuy nhiên, có lẽ bạn muốn chắc chắn bộ sưu tập thực sự có một số yếu tố đầu tiên. Các tài liệu không rõ ràng rằng first() ném một IndexOutOfBoundsException nếu danh sách có sản phẩm nào, nhưng tôi có một cảm giác nó vẫn có thể. Nếu đó là trường hợp, có thể bạn muốn:

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

Hoặc, nếu bạn muốn trở thành siêu ngắn gọn tại các chi phí của một số khả năng đọc, bạn có thể sử dụng phương pháp này (courtesy John Wagenleitner):

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