2015-04-07 33 views
0

我有一類FogsController,有一個過濾器和兩個功能在軌的before_filter設置變量

class FogsController < ApplicationController 
    before_filter :check_id, only: [:get_orders] 

    def get_orders 
    #doing some condition with variable **@name** 
    end 

    def call_orders 
    #calling get_orders here 
    end 

    protected 

    def check_id 
    @name = params[:name] 
    #checking some condition with that **@name** 
    end 

end 

所以我試圖做的是,我需要調用get_orders從call_orders功能。所以這裏的問題是正常調用功能get_orders,之前函數check_id將觸發和設置變量。那麼當我打電話給get_orderscall_orders方法時,這個before_filter函數如何工作?

回答

1

控制器初始化後調用該過濾器。因此,如果您從另一個操作調用任何操作,則不會執行該過濾器。

所以在這種情況下,check_id將只被調用一次。

1

過濾器僅根據將操作路由到控制器的方式工作。內部有一個叫process_action的方法(除其他外)執行該動作的回調。和行動本身。但是,如果您從其他操作調用操作,則不會觸發任何回調。

通常我會建議你不要這樣做 - 重構你的代碼,這樣get_orderscall_orders都會調用一個私有方法來完成這個常見的工作(包括設置@name)。

+0

那麼在函數調用之前設置所有這些變量的最好方法是什麼?是process_action – django

+0

不 - 這是一個鐵路內部。我會添加一個替代 –

+0

亞,實際上我嘗試了相同的方式,但是當我從call_order調用get_orders時,參數具有新值,所以我需要傳遞新參數,在那個調用中我遇到了問題 – django