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