需要帮助改善我的应用程序中params保存对象的方式

时间:2014-01-08 06:26:08

标签: grails groovy gorm

所以,我有一个收集大量无线电选择和复选框的表单,我需要根据返回的内容构建一系列对象,这可能如下所示:

[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]

1 个答案:

答案 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()