我有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]的属性[描述]的约束[唯一]的范围必须是同一类的有效属性名称
如何从a到b获得属性?
答案 0 :(得分:1)
您需要编写custom validator来检查唯一性,因为它依赖于比b
的单个实例更多的信息。
像
这样的东西static constraints {
description validator: { val ->
!a.findByName(val)
}
}
可能会成功。
答案 1 :(得分:1)
假设您尝试在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#sharingConstraints
这将导入两个类共享的属性的所有约束。在你的情况下,没有。
<强>更新强>
我得到了一个类似的问题并找到了解决方案。所以我想和你分享一下。
可以使用自定义验证器解决该问题。在您的情况下,类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()
})
}
由于要求有点奇怪,很难正确回答你的问题。但也许它会有所帮助。