2011-11-26 127 views
0

我想知道是否有更清晰的方式來編寫控制器代碼?在控制器中結合保存/更新操作?

正常情況下,當您進行保存時,您會從參數中創建一個新對象並驗證/保存該對象。

def order = new Order(params) 
    if(order.validate() && order.save()) 

在執行更新操作時,您從數據庫獲取對象並綁定params/validate/save。

def order = Order.get(params.id) 
    order.properties = params 
    if(order.validate() && order.save()) { 

有沒有一種方法可以在saveOrUpdate操作中組合保存和更新?

回答

2
def saveOrUpdate = { 
    flash.errors = [] 
    def order = params.id ? Order.get(params.id as Long) : null 

    if (order) { 
     bindData (order, params) 
    } else { 
     order = new Order(params) 
    } 

    if (!order.hasErrors() && order.save(flush: true)) { 
     flash.message = (params.id ? message(code: 'object.updated.message') : message(code: 'object.created.message')) 
     return redirect(action: "edit", model:[bean:order]) 
    } else { 
     flash.errors << message(code: 'errors.save.object') 
     return render(view: 'edit', model: [bean: order]) 
    } 
}