我目前在我的标题栏中有一个登录弹出窗口,位于我网站的每个页面上。我希望能够在成功登录后重新加载此人所在的当前页面。我如何在控制器中执行此操作?
def create
#declaring and defining user variable stuff
if user.save
#reload current page <--how do I do this?
end
end
由于
答案 0 :(得分:49)
对于我的应用程序,我使用redirect_to :back
并且它可以解决问题。但是,我怀疑这可能在非一般用例中有错误(用户来自特殊页面?)但我到目前为止还没有在我的应用程序中找到它。
答案 1 :(得分:39)
如果您正在寻找一种方法来使用XHR请求刷新页面(通常为redirect_to :back
),您不必寻找更改响应类型的方法 - 只需告诉页面用内联JS重新加载。
format.js {render inline: "location.reload();" }
就像Elena提到的那样,这应该放在respond_to块中,如下所示:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
答案 2 :(得分:13)
在Rails 5 redirect_to :back
is improved中:
redirect_back(fallback_location: root_path)
答案 3 :(得分:12)
Archonic以上的答案对我有用。但是,在Rails 3中,我不得不将其放在respond_to
块中,以避免出现“ArgumentError”(参数太少)&#39;错误:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
答案 4 :(得分:8)
自Rails 5(或旧版本)以来,您使用request.referrer
方法。您只需从控制器重定向到引用者,它就会打开请求来自的页面。
redirect_to request.referrer, notice: "You're being redirected"
答案 5 :(得分:3)
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开始被删除
答案 6 :(得分:0)
在Archonic和Elena的答案的基础上,reload函数接受一个参数,以强制从服务器(即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
答案 7 :(得分:0)
只需重定向到您要在函数中使用的任何网址:
重定向到what_ever_path
答案 8 :(得分:0)
这是您想要的语法...在Rails 6中可用
respond_to do |format|
format.html { redirect_to request.referrer, notice: "User was successfully WHATEVER." }
end