[英]How can I reload the current page in Ruby on Rails?
我目前在我网站的每个页面上的标题栏中都有一个登录弹出窗口。 我希望能够在成功登录后重新加载此人所在的当前页面。 我如何在控制器中执行此操作?
def create
#declaring and defining user variable stuff
if user.save
#reload current page <--how do I do this?
end
end
谢谢
对于我的应用程序,我使用redirect_to :back
并且它可以解决问题。 但是,我怀疑这在非一般用例中可能有错误(用户来自特殊页面?)但到目前为止我还没有在我的应用程序中找到它。
如果您正在寻找一种使用 XHR 请求刷新页面的方法(通常是redirect_to :back
),则不必寻找更改响应类型的方法 - 只需告诉页面使用内联 JS 重新加载.
format.js {render inline: "location.reload();" }
就像Elena提到的那样,这应该放在 response_to 块中,如下所示:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
在 Rails 5 中, redirect_to :back
改进了:
redirect_back(fallback_location: root_path)
从 Rails 5(或者可能是旧版本)开始,您有一个request.referrer
方法。 您只需从控制器重定向到引用者,它就会打开请求来自的页面。
redirect_to request.referrer, notice: "You're being redirected"
Rails 5 引入了替代功能:
redirect_back(fallback_location: root_path)
只要 HTTP_REFERER 已知,它就会重定向回来。 否则它会重定向到 fallback_location。
redirect_to :back
在 Rails 5.0 https://github.com/rails/rails/pull/22506 中已弃用,并自 Rails 5.1 起删除
这个语法就是你想要的......适用于 Rails 6
respond_to do |format|
format.html { redirect_to request.referrer, notice: "User was successfully WHATEVER." }
end
基于Archonic和Elena的答案,重新加载函数接受一个参数来强制页面从服务器(又名forceGet)重新加载,而不是从缓存中重新加载。 控制器逻辑可以设置参数,例如用户登录成功或失败,以在将其发送到页面时触发所需的行为。
# force_get = controller_logic ? true : false
respond_to do |format|
format.js { render inline: "location.reload(#{force_get});" }
end
更新: forceGet 选项的逻辑已被弃用。 如果您确实想从服务器重新加载,您可以使用以下逻辑:
# force_get = controller_logic ? true : false
respond_to do |format|
format.js { render inline: force_get ? "window.location.href = window.location.href;" : "location.reload();" }
end
只需重定向到您想要的函数中的任何网址:
redirect_to what_ever_path
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.