2016-04-11 2 views
0

Я имею вопрос проверки очень похож на то, что описано здесьGrails проверка на соответствующий «hasMany» объекта

https://schneide.wordpress.com/2010/09/20/gorm-gotchas-validation-and-hasmany/

, но с существенной разницей, что у меня нет (или хочу) a List<Element> elements Поле в моем домене. Мой код

class Location { 

    static hasMany = [pocs: LocationPoc] 

    Integer id 
    String address 
    String city 
    State state 
    String zip 
    ... 

    static mapping = { 
     ... 
    } 

    static constraints = { 
     def regEx = new RegEx() 

     address blank: true, nullable: true, matches: regEx.VALID_ADDRESS_REGEX 
     city blank: true, nullable: true 
     state blank: true, nullable: true 
     zip blank: true, nullable: true 
     ... 
    } 
} 

Однако, если сохранить/обновить местоположение с двухъярусным РОС (точка контакта), я получаю некоторые дикие ошибки я. Я хотел бы проверить POC, когда я сохраняю/обновляю местоположение, но я точно не знаю, как это сделать. Я пробовал несколько вариантов:

pocs validator: { 
    obj -> obj?.pocs?.each { 
     if (!it.validate()) { 
      return false 
     } 
    } 
    return true 
} 

не напрасно. Возможно ли это, не создавая новое поле в моем домене, List<LocationPoc> pocs?

+1

'pocs validator: {val, obj, err -> val? .each {if (! It.validate()) return false; ...}} 'Не работает для вас? –

+0

Использование 'val, obj, err -> val? .each' сработало! Большое спасибо. Я думал, что на правильном пути. – mjswartz

ответ

1

Вы близко. Проблема в том, что вам нужно настроить таргетинг на свойство, которое вы хотите проверить, вместо использования ссылки на объект. Он должен выглядеть так:

pocs validator: { val, obj, err -> 
    val?.each { 
    if (!it.validate()) return false 
    } 
} 
Смежные вопросы