所以,我有一个收集大量无线电选择和复选框的表单,我需要根据返回的内容构建一系列对象,这可能如下所示:
[thingid:1, 13:30,14:33, 11:26, 12:78, action:save, controller:userThing]
一个对象是从thingid创建的,整数值对是用于创建n个附加对象的2个其他对象的id,所以现在我用para()循环遍历params并过滤非具有long if表达式的整数对,然后保存我需要的对象:
params.each {
key, value ->
if (key=="submit" | key=="action" | key=="thingid" | key=="controller"){}else{
def prop = ThingProperty.find(){
id == key
}
def level = ThingLevel.find(){
id == value
}
new UserThingScore(userthing: userthing,thingproperty: prop ,thinglevel: level).save(flush:true)
}
}
它有效,因为它正确地创建了所有必需的对象,但这对我来说似乎很荒谬,而且我知道必须有更好的方法......有些我可以将表单元素分组,以便它们像这样返回?:
[thingid:1, integerpairs:[13:30,14:33, 11:26, 12:78],action:save,controller:userThing]
答案 0 :(得分:4)
替代方案可能是:
def userThingList = params.keySet().grep( Integer ).collect { it ->
new UserThingScore( userthing: userthing,
thingproperty: ThingProperty.get( it ),
thinglevel: ThingLevel.get( params[ it ] ) )
}
userThingList*.save()