我正在尝试为hasMany实现“批量”插入。并且在那里得到了90%,但是我的多层设计打了个嗝。我有一个类似
的模型class Parent {
static hasMany = [references: Reference]
}
class Reference {
static belongsTo = [parent: Parent]
String name
}
class ConcreteReference extends Reference{
String childName
}
我能够通过标记来获得创建working
(通过创建记录定义)
<form action='reference/1/edit>
<input name='references[0].name' value='name1' />
<input name='references[0].childName' value='childName1' />
<input name='references[1].name' value='name2' />
<input name='references[1].childName' value='childName2' />
</form>
但问题是它总是创建具体类型(class ='domain.Reference'),因此“子名称始终为null。
我用过:
def edit(def id){
def parent = Parent.get(id)
//i actually clear all the old references first (didn't show that code)
parent.properties = params
parent.save(flush:true)
}
我如何指定“具体类型”(我尝试了类的隐藏值,它不起作用)或者是否有一种简单的方法来循环访问params.reference [idx]创建它然后将它添加到Parent ?
希望很清楚,如果您需要任何澄清,请告诉我。
答案 0 :(得分:0)
我解析params的手动方法(不是我硬编码ConcreteReferences,但我能够对params进行分组):
def refRegex = /^([a-zA-Z]+\[\d+\])/
for (ref in params.groupBy { it -> it.key.find(refRegex)}.findAll{it.key}){
//this will be like references[0]: [references[0].name : 'test', etc]
//for each one create a FreeFormReference
def _ref = new ConcreteReference(ref.value.collectEntries{it -> [it.key.replace(ref.key + '.', ''), it.value]})
log.info('created reference ${_ref}')
parent.addToReferences(_ref)
}