我目前在我的网站的每个页面上都有一个登录弹出框,我想在成功登录后重新加载当前页面。在控制器中如何实现这一点?
def create
#declaring and defining user variable stuff
if user.save
#reload current page <--how do I do this?
end
end
感谢。我目前在我的网站的每个页面上都有一个登录弹出框,我想在成功登录后重新加载当前页面。在控制器中如何实现这一点?
def create
#declaring and defining user variable stuff
if user.save
#reload current page <--how do I do this?
end
end
感谢。对于我的应用程序,我使用redirect_to :back
并且它能够达到预期效果。然而,我怀疑在某些特殊情况下(例如用户来自特殊页面),这可能会导致错误,但是目前我在我的应用程序中还没有发现这个问题。
redirect_to :back
已被弃用并将在5.1中移除,应使用redirect_back(fallback_location: fallback_location)
来代替。 - DuckNG如果你想要通过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
在Rails 5中,redirect_to :back
通过以下方式得到了改进:redirect_back。
redirect_back(fallback_location: root_path)
redirect_to :back
对我似乎不起作用。 - Chau Giangredirect_back fallback_location: root_path, notice: "完成任务"
。 - Simonerequest.referrer
方法。您只需从控制器重定向到引用者并打开请求来源页面即可。
redirect_to request.referrer, notice: "您正在被重定向"
Archonic的答案对我有用。然而,在Rails 3中,我必须将这个放在respond_to
块中,以避免出现 'ArgumentError(参数过少)'错误:
respond_to
块中需要放置此代码以避免错误:
respond_to do |format|
format.js {render inline: "location.reload();" }
end
redirect_back(fallback_location: root_path)
这是你想要的语法...在Rails 6中可用
respond_to do |format|
format.html { redirect_to request.referrer, notice: "User was successfully WHATEVER." }
end
只需在函数中重定向到您想要的任何URL:
redirect_to what_ever_path
在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