2

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

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

def kick_outable?
  if current_user
    redirect_to signout_path and return
  end
end

但显然我不能在已经存在 a renderorredirect_to的动作中使用该方法。从错误消息:

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

那么,我该如何解决呢?如何重定向尝试访问不应访问的操作的人?

4

2 回答 2

2

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

于 2013-09-21T14:37:04.067 回答
1

添加到恩里克的答案。即使在渲染或重定向语句之后,控制器中方法的执行也会继续。因此,除非通过返回在其中一个之后停止执行,否则拥有其中的多个是行不通的。

# 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
于 2013-09-21T14:53:29.100 回答