重定向到当前页面Rails

9

我在我的应用程序导航栏中有一个登录表单,想知道是否有一种简单的方法,当您登录时,将sign in重定向到您当前所在的页面。 谢谢!

6个回答

19

只要有引用页,您就可以使用redirect_to(:back)。但是,我建议您查看这个答案,因为那里提供的解决方案将对失败的登录和OAuth重定向等问题具有弹性。


7
在Rails 5中,您应该使用redirect_back并添加后备路径:
redirect_back(fallback_location: root_path)

2
如果您已经编写了创建用户会话的代码,则只需在sessions_controller中添加此行代码即可:
redirect_to root_url, :notice => "Logged in!"

在这里,您可以输入任何路径,以便将用户重定向到该路径,而不是root_url。但请确保在routes.rb中添加它。
如果您考虑未成功的登录,可以使用render方法重新加载您的登录视图。


问题在于我想要 redirect_to 路径根据未登录用户当前所在的站点位置进行更改。导航栏在每个页面上都可见,因此例如,如果用户在主页上登录,则希望 sessons_controller 运行 reidrect_to home_path 或者如果他们在用户页面上登录,我想它运行 redirect_to user_page - user2136807
你的登录表单是在另一个视图中还是在你提到的栏中? - Erfan Sh.z.
它位于导航栏中,因此它在应用程序布局中。 - user2136807
我没有尝试过,但你知道你可以在控制器中呈现一个.json文件。因此,你需要编写一个JavaScript函数来重新加载页面并在控制器中呈现该文件。类似于 location.reload() - Erfan Sh.z.

2
在 Rails 7+ 中,我们现在可以使用 redirect_back_or_to
redirect_back_or_to root_path

注意:`root_path` 可以是您想要的任何后备路径/URL。

1
函数实际上是 redirect_back_or_to,但是没错这就是正确的方法! - Jillian Hoenig
1
@JillianHoenig 哎呀,更新了答案以使用正确的顺序。 - Justin Tanner

1

redirect_back 是对我有用的:

redirect_back fallback_location: root_path

0

这个解决方案来自Devise团队,应该可以解决问题...

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接