filters
在Rails中,我們可以定義method在進入action之前、之中、之後進行,分別使用before_filter、after_filter和around_filter來實做。其中最常見的應該就是用before_filter來做權限驗證了:before_filter :authenticate上面的例子中接在before_filter後的是一個symbol,代表著要呼叫哪個method
before_filter最主要的功能還是在跨action的共用參數傳遞,在前面關於layout & style的文章中就有呼叫method,然後method回傳一個instance varible的例子。
在ihower大大的部落格中有提到,除了method以外,還能傳入code block以及物件。若傳入的是物件,Rails就會執行物件中的filter方法。
那code block呢?
在filter中傳入參數
前面有提到要在filter傳入method,要用symbol來指定method的名稱,但是我們沒辦法在symbol中加入參數("before_filter authenticate(arg)"明顯是個錯誤的寫法Orz),所以要傳入參數就要用以下兩個方法了:1. code block
before_filter do |c| c.send(:authorize, args) end或
before_filter :only => :show do |controller| controller.instance_eval do authorize(args) end end
以上兩個方法我也還沒驗證過,改天來試試看XD
2. inline procs
這種方法最直覺,不過我一樣還沒驗證過能不能用XDbefore_filter {authorize(args)}