如何重定向未授权

时间:2013-09-21 14:20:37

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

对于某些操作,例如“登录”或“注册”,如果用户已经登录,我想重定向用户。

因此,我在ApplicationController中创建了一个方法:

def kick_outable?
  if current_user
    redirect_to signout_path and return
  end
end

但很显然,我不能在行动中已有renderredirect_to的行动中使用该方法。来自错误消息:

Please note that you may only call render OR redirect, and at most once per action.

那么,我该如何解决这个问题呢?如何重定向尝试访问无法执行的操作的人?

2 个答案:

答案 0 :(得分:2)

您可以将该方法用作before_filter(不要在操作中调用该方法),并且应该按预期工作。

答案 1 :(得分:1)

添加恩里克的答案。即使在render或redirect语句之后,控制器中方法的执行仍会继续。因此,除非通过返回在其中一个之后停止执行,否则有多个这些都不起作用。

# This works because it stops execution after first redirect if not current_user
def index
  unless current_user
    redirect_to root_path and return
  end

  redirect_to user_path 

end



# This does not work as execution continues after check_user method

def check_user
  unless current_user
    redirect_to root_path and return
  end
end

def index  
  check_user  
  redirect_to user_path     
end