对于
等域名class Question {
String questionText
Type questionType
static hasMany = [choices: Option]
}
我想知道这种类型的条件约束是否可行。我希望约束是这样的:如果questionType
是(无线电,复选框,下拉列表)和(&&)choices.size() == 0
,则违反约束并抛出错误。我知道条件的第二部分,即检查收集的大小可以用大小参数来完成,但我想知道我们是否可以具有如上所述的复杂条件,即用&&amp ;;运营商。
答案 0 :(得分:2)
所以你需要自定义验证器。像下面这样的东西应该做的工作。看看Grails documentation - 非常方便。
static constraints = {
questionType validator: { val, obj ->
!(val in [Type.Radio, Type.Checkbox, Type.Dropdown] && obj.choices.isEmpty())
}
}
但是,您将收到grails生成的错误消息。提供更可读的验证错误是件好事。您可以返回自定义消息代码并在messages.properties
中定义:
static constraints = {
questionType validator: { val, obj ->
if (val in [Type.Radio, Type.Checkbox, Type.Dropdown] && obj.choices.isEmpty())
return 'emptyChoicesErrorMessage'
}
}