对于某些操作,例如“登录”或“注册”,如果用户已经登录,我想重定向用户。
因此,我在ApplicationController中创建了一个方法:
def kick_outable?
if current_user
redirect_to signout_path and return
end
end
但很显然,我不能在行动中已有render
或redirect_to
的行动中使用该方法。来自错误消息:
Please note that you may only call render OR redirect, and at most once per action.
那么,我该如何解决这个问题呢?如何重定向尝试访问无法执行的操作的人?
答案 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