我有一个类FogsController,它有一个过滤器和两个函数
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
所以我要做的是,我需要从 call_orders 调用 get_orders 函数。所以这里的问题是在函数 check_id 触发并设置变量之前正常调用函数 get_orders 。那么当我从 call_orders 方法调用 get_orders 时,这个before_filter函数如何工作?
答案 0 :(得分:1)
初始化控制器后调用过滤器。因此,如果您从其他操作调用任何操作,则不会执行过滤器。
因此,在这种情况下,check_id
只会被调用一次。
答案 1 :(得分:1)
过滤器仅根据路由到控制器的操作进行操作。在内部有一个名为process_action
的方法,其中(除其他外)执行该操作的回调。和行动本身。但是,如果您从其他操作调用操作,则不会触发任何回调。
通常我建议您不要这样做 - 重构代码,以便get_orders
和call_orders
调用一个私有方法来完成这项常见的工作(包括设置@name)。