Импорт домена в ограничениях
У меня есть 2 класса домена
class a {
String name
static constraints = {
name unique:true
}
}
class b {
String description
}
и в классе домена B я хочу назвать класс A
import a
class b {
String description
static constraints = {
description unique:'a.name'
}
}
и получить ошибку
Область действия для ограничения [уникального] свойства [описание] класса [b] должно быть допустимым именем свойства того же класса
Как я могу получить свойство от класса А до В?
2 ответа
Если вы попытаетесь сделать это в Grails 2+
Вы не можете использовать проверку таким образом. В вашем примере вам нужно сослаться на свойство того же класса домена. Чтобы исправить ограничение в классе B
ты можешь написать:
class B {
String description
static contraints = {
description unique:true
}
}
Но я думаю, что вы хотите импортировать ограничения из класса a
что сделано так
class B {
String description
static contraints = {
importFrom A
}
}
См. http://grails.org/doc/latest/guide/validation.html
Это импортирует все ограничения на свойства, которые разделяют два класса. Которого в вашем случае нет.
ОБНОВИТЬ
Я получил похожий вопрос и нашел решение для него. Поэтому я подумал поделиться этим здесь с вами. Проблема может быть решена с помощью специального валидатора. В вашем случае ограничения для класса B
:
static constraints = {
description(validator: {
if (!it) {
// validates to TRUE if the collection is empty
// prevents NULL exception
return true
}
def names = A.findAll()*.name
return names == names.unique()
})
}
Трудно ответить на ваш вопрос правильно, так как требования немного странные. Но, возможно, это поможет.
Вам нужно написать собственный валидатор, чтобы проверить уникальность, так как он опирается на больше информации, чем один экземпляр b
буду иметь.
Что-то вроде
static constraints {
description validator: { val ->
!a.findByName(val)
}
}
может сделать трюк.