有一种我无法理解的行为。
我有2个域类,我使用这个名称来说明问题,Foo和Bar是:
[Foo]
class Foo {
String value1
}
[Bar]
class Bar {
String value1
static belongsTo = [foo: Foo]
}
现在我的控制器我有这个:
def createBar = {
def foo = foo.get(params['foo_id'].toLong()) //this is a hidden field in form
def bar = new Bar()
bindData(bar, params, [exclude:['foo']])
bindData(bar, foo, [include:['foo']] //This not work!
//bar.foo = foo //This works fine!
bar.save()
}
当我使用bindData保存时,控制器抛出TransientObjectException,表示Foo未保存,但是当我使用第二个表单时,操作正常,并保存域而没有例外。
为什么会这样?我不明白,因为对我来说,bindValue()和bar.foo是相同的行为。
我没有在我的应用中使用dbCreate,只验证,这是表格的表示:
[Foo]
id (PK)
value1 (varchar)
[Bar]
id (PK)
value2 (varchar)
foo_id (FK)
我使用的是Grails 2.2.3
感谢。
答案 0 :(得分:0)
您的代码存在各种问题。
您将foo的实例传递给排除,方法名称为bindData
而不是bindValue
:
bindValue(bar, params, [exclude:[foo]])
这应该是
bindData(bar, params, [exclude:['foo']])