Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/53.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails-正确重定向到上一页_Ruby On Rails_Redirect - Fatal编程技术网

Ruby on rails Rails-正确重定向到上一页

Ruby on rails Rails-正确重定向到上一页,ruby-on-rails,redirect,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." e

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

控制器代码

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
我遇到的问题是,如果用户在没有实际登录的情况下离开登录页面单击,则
会话[return\u to]
变量未正确清除,如果他们稍后返回登录,则会重定向到错误页面


那么,我该如何设置它呢?如果用户在登录页面之外单击,会话[:redirect_to]变量将被重置?

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

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

redirect_to signin_path(return_to: newcompany_path)
然后,在登录表单中,确保包含一个带有
return\u to
值的隐藏字段,如:

hidden_field_tag :return_to, params[:return_to]

然后在控制器登录操作中,您将检查
参数[:return\u to]
,而不是
会话[:return\u to]
,以获取所需的路径。

这就是您要查找的路径吗

redirect_to request.referrer

这真漂亮!非常感谢。工作完美。我以前从未使用过查询字符串参数,您是否知道有任何地方可以获得有关这方面的更多知识?它们没有什么特别之处。您几乎可以设置任何想要的键/值(尽管您必须小心在值中使用特殊字符,如?和&等),然后服务器可以根据请求使用这些键/值。因此,如果您转到像/foo?bar=1&baz=rails这样的URL,在rails中,您将有名为
bar
baz
的参数。在Rails中生成路径时,Rails无法识别的哈希键(id、锚点等)将转换为查询字符串。所以
signin\u path(return\u to:newcompany\u path)
会给你一个像/signin?return\u to=/companys/new这样的URL