before_filter如何在rails中工作?

时间:2013-12-18 05:12:09

标签: ruby-on-rails

before_filter如何在rails中工作。假设在ApplicationController中我有以下代码

class ApplicationController < ActionController::Base
  before_filter :authorize

def authorize
    unless User.find_by_id(session[:user_id])
      redirect_to login_url, :notice => "Please log in"
    end
  end

如何控制用户访问权限,以便用户只能访问about页面,但除非他们已登录,否则无法访问项目页面。 当这个before_filter被调用或被自动调用时?我检查了rails文档,但那里什么都没有。

3 个答案:

答案 0 :(得分:0)

这里有一些过滤器的解释,http://guides.rubyonrails.org/action_controller_overview.html#filters

简而言之,它会做什么,它将在控制器中的每个操作之前执行方法authorize,在这种情况下,如果未登录,您的authorize方法将重定向到登录,所以它将无法采取任何行动

答案 1 :(得分:0)

如果您使用了这个,那么将为每个请求执行authorize方法。您可以检查request对象,检查当前控制器和操作,并在那里设置一些条件。

答案 2 :(得分:0)

重要的是要知道过滤器可以堆叠。我的意思是,如果 WheteverController&lt; ApplicationController的 如果在ApplicationController中创建过滤器,则会在WheteverController中的任何方法之前执行。如果你想用一行授权所有应用程序,这很好。

顺便说一句,before_filters可以接收参数: - 仅[:methods_affected] - 除了[:methods_excluded]