2015-04-07 47 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