如何在Ruby on Rails中重新加载当前页面?

时间:2011-09-18 23:51:18

标签: ruby-on-rails ruby ruby-on-rails-3 url-routing

我目前在我的标题栏中有一个登录弹出窗口,位于我网站的每个页面上。我希望能够在成功登录后重新加载此人所在的当前页面。我如何在控制器中执行此操作?

def create
  #declaring and defining user variable stuff
  if user.save
    #reload current page <--how do I do this?
  end
end

由于

9 个答案:

答案 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)

ArchonicElena的答案的基础上,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