从grails约束验证返回域对象

时间:2010-09-28 19:32:59

标签: constraints gorm grails

是否可以在将返回有效对象的grails中编写自己的验证器?

类似的东西:

static constraints = {
    name(validator: {val, obj ->
        if (Drink.findByName(val)) return [Drink.findByName(val)]
    })
}

换句话说 - 如果饮料已存在于数据库中,只需在有人做

时返回现有饮料

新饮料(“可口可乐”)

和可乐已经在数据库中

2 个答案:

答案 0 :(得分:2)

您无法使用自定义验证程序执行此操作。这并不是它的意义所在。来自Grails Reference

关闭可以返回:

  • nulltrue表示该值有效
  • false表示无效值并使用默认消息代码
  • 一个字符串,用于指示要附加到“classname.propertName”的错误代码。用于解决错误消息的字符串。如果无法解析特定于字段的消息,则将解析错误代码本身,从而允许显示全局错误消息。
  • 包含上述字符串的列表,然后是其后的任意数量的参数,可以用作从3开始索引的格式化消息参数。请参阅grails-app/i18n/message.properties以查看默认错误消息代码如何使用参数。

另一种方法可能是创建一个服务方法,1)查找域并返回它(如果存在),2)否则,保存域并返回它。

可能有更优雅的选择。无论如何,Grails的约束机制不是(也不应该)能够做到这一点。

答案 1 :(得分:0)

不确定您是否可以在验证器内执行此操作,但是:

饮料d = Drink.findOrSaveWhere(姓名:' Smooth Drink&#39 ;, alcoholLevel:' 4.5')