2010-08-13 96 views
1

我需要創建一個在任何保存/更新操作中觸發的過濾器,以便記錄正在完成的操作的歷史記錄。我有一個問題獲取正在操作的對象的ID。訪問過濾器中的params.id問題

我控制器簡化:

class FooController { 

    static allowedMethods = [save: "POST", update: "POST", delete: "POST"] 

    def save = { 

     def fooInstance = new Foo(params) 

     if (fooInstance.save()) { 
      // params.id = fooInstance.id 
      return redirect(action: "show", id: fooInstance.id) 
     } else { 
      return render(view: "create", model: [fooInstance: fooInstance]) 
     } 
    } 
} 

我的過濾器需要得到我把回報重定向對象的ID,但除非我取消params.id = fooInstance.id我上面的過濾器PARAMS變空。 ID,我必須失去了一些東西處理變量的作用域:

def filters = { 

     history(controller: '*', action: 'save|update|delete|restore') { 

      after = { 
       println params.id 
      } 
    } 
} 

我也試過路過模型後=期望得到我的fooInstance但我得到空爲好。任何想法什麼是錯的?謝謝。

+0

我希望params.id將爲空保存,但不適用於更新/刪除(因爲params代表請求參數 - 保存時,該實體還不存在,因此可能沒有id )。這是你所看到的嗎? – 2012-02-17 04:22:02

回答

2

看看這個插件http://grails.org/Hibernate+Events+Plugin或grails審計日誌插件。我認爲他們會讓你走得很遠。

這是一種不同的方法,然後你在你的問題中提到,但我認爲你可能更喜歡它。

+0

偉大的插件。雖然我仍然試圖找出爲什麼params.id沒有通過,審計日誌插件將做我所需要比過濾器更好。再次感謝! – Micor 2010-08-14 18:52:46