如何对 grails 上的域字段应用新验证

How to apply new validation for a domain field on grails

我有这个域名:

class Foo {
  static hasMany=[
    bars: Bar
  ]

  String name

  static constraints = {
    name(blank: false, unique: true)
  }
}

在将值插入数据库后,我添加了另一个柱状图验证

bars(nullable: false, validator: {value, object ->
            if(value.isEmpty()){
               return['bars.empty.validation.error']
            }
        })

现在,当我尝试更新保存时没有栏的 Foo 实例时,保存在字段 bars 上抱怨:

Field error in object 'Foo' on field 'bars': rejected value [[Bar : (unsaved)]]

我的问题 是如何在没有 bars

的情况下更新 Foo 个实例

您可以将自定义验证更改为仅适用于没有 id 关联的实例(表示它们正在插入而不是更新)。比如这样:

bars(nullable: false, validator: {value, object ->
  if (object?.id) return // don't apply to previously saved instance.
  if(value.isEmpty()){
    return['bars.empty.validation.error']
  }
})