2017-02-01 8 views
0

У меня возникают проблемы с доступом к уникальному ограничению, определенному в домене Grails. Here's an example from the official Grails documentation (немного отредактирован, чтобы иметь уникальное ограничение):Доступ к уникальному ограничению в Grails через constrainedProperty

class User { 
    String firstName 
    String middleName 

    static constraints = { 
     firstName blank: false, nullable: false 
     middleName unique: true, nullable: true 
    } 
} 

На Grails 3.1.9:

Этот код работает: User.constrainedProperties.firstName.blank

Этот код не работает: User.constrainedProperties.middleName.unique

Я получаю эта ошибка:

groovy.lang.MissingPropertyException: No such property: unique for class: grails.validation.ConstrainedProperty 

Есть ли способ выяснить, установлено ли это ограничение, аналогично проверке, установлено ли «пустое» ограничение? Спасибо

UPDATE: Вот что я получаю, когда пытаюсь использовать код, предложенный в комментариях (пустая vs с нулевым значением). hasAppliedConstraint работает нормально, но getAppliedConstrait этого не делает. Я предполагаю, что я что-то делаю глупой ошибкой?

Condition not satisfied: 

User.constrainedProperties.middleName.getAppliedConstraint('‌​unique') 
              |       | 
              |       null 
              [[email protected]'middleName'middleNamemap['nullable' -> [[email protected]], 'unique' -> [[email protected]]]] 
+0

См https://github.com/grails/grails-core/blob/3fa286c53d674f1e25cce95661b1ae38aa31ca3b/grails-test-suite-uber/src/test/groovy/grails/validation /ValidateableTraitSpec.groovy#L116-L150 –

+0

Способ сделать это будет зависеть от того, с какой версией Grails вы работаете. –

+0

Ах да, я должен был указать мою версию Grails 3.1.9 –

ответ

0

Вот что в конечном итоге сработало для меня. Не знаю, почему.

User.constrainedProperties.middleName.getAppliedConstraints().find {it.name == 'unique'}.properties.parameter 
0

Ваш код работает, потому что User.constrainedProperties возвращает Map с ключами domainPropertyName и значения ConstrainedProperty. В вашем случае вы получаете ConstrainedProperty свойства middleName, у которого есть метод getAppliedConstraints(), который возвращает все ограничения, применяемые к middleName.

Лучше вы можете:

User.constrainedProperties.middleName.getAppliedConstraint('unique').parameter