在rails中,控制器的before过滤器中调用的方法是否针对每个操作运行?

时间:2014-04-02 03:52:38

标签: ruby-on-rails ruby ruby-on-rails-3

让我们在我的rails控制器中说我有一个方法set_one(),它将通过before_filter调用。在控制器操作之前每次都会调用此方法,还是在整个控制器中运行一次?如果它是一次性的事情,那么这意味着它创建的实例变量将在整个控制器中可用。我认为控制器动作是无状态的。如果仅在所有操作之前运行一次,这是否有助于缩小差距?

def set_one
 # do really complex processing and set the variable @one. 
 @one = 1;
end

提前致谢。 :)

1 个答案:

答案 0 :(得分:6)

before_filter将为控制器的每个请求调用该方法。您可以将其设置为仅针对某些操作运行:

before_filter :authorize, :only => :delete

甚至阻止它在特定行动中运行:

before_filter :authorize, :except => [:index, :show]

顺便说一下,before_filter的新语法是before_action