【发布时间】:2013-07-10 04:45:33
【问题描述】:
我的应用程序导航栏中有一个登录表单,我想知道是否有一种简单的方法可以让您在登录时重定向到您当前所在的任何页面。谢谢!
【问题讨论】:
标签: ruby-on-rails forms routes
我的应用程序导航栏中有一个登录表单,我想知道是否有一种简单的方法可以让您在登录时重定向到您当前所在的任何页面。谢谢!
【问题讨论】:
标签: ruby-on-rails forms routes
你可以redirect_to(:back),只要给出推荐人。不过,我建议您看一下this answer,因为那里提供的解决方案可以应对登录失败和 OAuth 重定向等问题。
【讨论】:
在 Rails 5 中,您应该使用 redirect_back 并添加回退路径:
redirect_back(fallback_location: root_path)
【讨论】:
如果您已经编写了为您的用户创建会话的代码,那么只需在您的会话控制器中添加这一行:
redirect_to root_url, :notice => "Logged in!"
这里不是 root_url,您可以输入您希望将用户重定向到的任何路径。
但请确保你有它 routes.rb
如果您考虑登录不成功,您可以使用render 方法重新加载您的登录视图
【讨论】:
redirect_to 路径根据未登录用户当前在站点上的位置进行更改。导航栏在每个页面上都可见,例如,如果用户在登录时位于主页上,我希望 sessons_controller 运行 reidrect_to home_path 或者如果他们在登录时在用户页面上,我希望它运行运行redirect_to user_page
.json 文件。所以你需要编写一个javascript函数来重新加载页面并在你的控制器中呈现该文件。某事喜欢location.reload()
来自 Devise 的This solution 应该可以解决问题...
在ApplicationController 中写入以下内容:
after_filter :store_location
def store_location
# store last url - this is needed for post-login redirect to whatever the user last visited.
return unless request.get?
if (request.path != "/users/sign_in" &&
request.path != "/users/sign_up" &&
request.path != "/users/password/new" &&
request.path != "/users/password/edit" &&
request.path != "/users/confirmation" &&
request.path != "/users/sign_out" &&
!request.xhr?) # don't store ajax calls
session[:previous_url] = request.fullpath
end
end
def after_sign_in_path_for(resource)
session[:previous_url] || root_path
end
【讨论】:
redirect_back 对我有用:
redirect_back fallback_location: root_path
【讨论】: