2011-02-23 53 views
2

如果使用在Rails中,如果“before_filter:login_required”有效,那么为什么要将“login_required”添加到某个操作不起作用?

before_filter :login_required 

作品,对于控制器的所有动作,但如果我评论说行了,只是做它像这样:

def index 
    login_required 
    [...] 
end 

那么服务器抱怨说,它只能每个动作一次渲染或重定向。我认为使用before过滤器与添加上述方法相同。请解释。

回答

2

的before_filter和around_filter可以 停止控制器 动作运行之前该请求。例如,对于 示例,这非常有用,可以拒绝对未经身份验证的用户的访问,也不会将 从HTTP重定向到HTTPS。只需调用render 或重定向即可。如果过滤器链是 暂停,则过滤器将不会执行 。

这是来自rails API(Filter Chain Halting)。因此,如果在过滤器中发生渲染或重定向,则过滤器链将暂停,其余代码将不会执行。所以,在这种情况下,错误不会发生。但是当你直接调用方法时,方法调用后的代码也会被执行,因此会发生错误“每个动作一次渲染或重定向”。

+0

如果您决定在动作中调用它,那么该怎么做? – 2011-02-24 02:10:03

+0

@动静能量如果设置了标志,如果重定向发生在login_required中并且调用'index'方法中的'return',那么你必须从'login_required'传递一个标志 – rubyprince 2011-02-26 01:21:04

相关问题