在我的应用程序中,我试图强制用户登录以执行某些操作。当他们尝试在未签名时执行这些操作时,他们将被重定向到“登录”页面,并且一旦他们登录,他们就会重定向到他们尝试访问的页面。我用下面的代码正确地工作。Rails - 正确重定向到上一页
控制器代码
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]变量被重置?
这很美!万分感谢。完美的作品。我没有使用查询字符串参数之前,你有任何机会知道任何地方获得更多的知识这个东西? – Scalahansolo
他们没有什么特别的特别之处。你几乎可以设置任何你想要的键/值(尽管你必须小心使用特殊字符,比如值和中的&),然后服务器可以根据请求使用它们。因此,如果您在Rails中访问像/ foo?bar = 1&baz = rails这样的URL,则会有名为'bar'和'baz'的参数。当您在Rails中生成路径时,Rails无法识别的任何密钥(id,anchor等)都会变成查询字符串。所以'signin_path(return_to:newcompany_path)'会为你提供一个URL/signin?return_to =/companies/new –