0

我正在尝试为 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'),所以“子名总是空的。

我用了:

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] 创建它然后将其添加到父级?

希望这很清楚,如果您需要任何澄清,请告诉我。

4

1 回答 1

0

我手动解析参数的方式(不是我硬编码 ConcreteReferences,但我能够对参数进行分组):

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)
}
于 2013-06-17T20:16:17.040 回答