在rails中使用before_filter设置变量

时间:2015-04-07 09:14:17

标签: ruby-on-rails ruby ruby-on-rails-4

我有一个类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函数如何工作?

2 个答案:

答案 0 :(得分:1)

初始化控制器后调用过滤器。因此,如果您从其他操作调用任何操作,则不会执行过滤器。

因此,在这种情况下,check_id只会被调用一次。

答案 1 :(得分:1)

过滤器仅根据路由到控制器的操作进行操作。在内部有一个名为process_action的方法,其中(除其他外)执行该操作的回调。和行动本身。但是,如果您从其他操作调用操作,则不会触发任何回调。

通常我建议您不要这样做 - 重构代码,以便get_orderscall_orders调用一个私有方法来完成这项常见的工作(包括设置@name)。