Rails - 正确地重定向到上一页

时间:2014-04-22 23:52:43

标签: ruby-on-rails redirect

在我的应用程序中,我试图强制用户登录以执行某些操作。当他们在未签名时尝试执行这些操作时,会将其重定向到“登录”页面,一旦他们登录,他们就会被重定向回他们尝试访问的页面。我使用下面的代码完成了所有这些工作。

控制器代码

if !(signed_in?)
  session[:return_to] = newcompany_path
  redirect_to signin_path
  flash[:notice] = "You must be signed in to add companies."
else
      @company = Company.new
  @primary_field = @@fields
end

...

redirect_path = session[:return_to]
if user && user.authenticate(params[:session][:password])
    sign_in user
    session[:return_to] = nil
    if (redirect_path == nil)
      redirect_to user
    else
      redirect_to redirect_path
    end
else

我遇到的问题是,如果用户点击了登录页面而没有实际登录,则session[return_to]变量未正确清除,如果他们之后又返回登录,他们被重定向到错误的页面。

那么,我该如何设置它,以便如果用户点击登录页面,会话[:redirect_to]变量会重置?

2 个答案:

答案 0 :(得分:2)

您可以在查询字符串参数而不是会话中传递return_to路径,并将其与登录表单一起提交,以便它仅适用于该表单,而不是后续请求。

当重定向到登录表单时,它看起来像:

redirect_to signin_path(return_to: newcompany_path)

然后,在您的登录表单中,请确保包含return_to值的隐藏字段,例如:

hidden_field_tag :return_to, params[:return_to]

然后在您的控制器操作中进行登录,您将检查params[:return_to]而不是session[:return_to]以获取所需的路径。

答案 1 :(得分:0)

这是你正在寻找的吗?

redirect_to request.referrer