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

Eve*_*ner 43 ruby ruby-on-rails url-routing ruby-on-rails-3

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

def create
  #declaring and defining user variable stuff
  if user.save
    #reload current page <--how do I do this?
  end
end
Run Code Online (Sandbox Code Playgroud)

谢谢

dat*_*ost 49

对于我的应用程序,我使用redirect_to :back它,它可以解决问题.但是,我怀疑这可能在非一般用例中有错误(用户来自特殊页面?)但我到目前为止还没有在我的应用程序中找到它.

  • 对于Rails 5,不推荐使用`redirect_to:back`在5.1中删除,而应使用`redirect_back(fallback_location:fallback_location)`. (27认同)
  • 这对我有用.您没有重新加载当前页面,就像您要进行创建操作然后再返回...如果您使用AJAX,那么您只需要更新显示一个家伙登录的部分...并且把他留在那个页面上. (2认同)
  • redirect_to的文档:http://api.rubyonrails.org/classes/ActionController/Redirecting.html (2认同)

Arc*_*nic 41

如果您正在寻找一种方法来redirect_to :back使用XHR请求刷新页面(通常),您不必寻找更改响应类型的方法 - 只需告诉页面使用内联JS重新加载.

format.js {render inline: "location.reload();" }

就像Elena提到的那样,这应该放在respond_to块中,如下所示:

respond_to do |format|
  format.js {render inline: "location.reload();" }
end
Run Code Online (Sandbox Code Playgroud)


bis*_*hal 15

在Rails 5 redirect_to :back 中改进了:

    redirect_back(fallback_location: root_path)
Run Code Online (Sandbox Code Playgroud)


小智 12

Archonic的上述答案对我有用.但是,在Rails 3中,我不得不将其放在一个respond_to块中以避免出现"ArgumentError(参数太少)"错误:

respond_to do |format|
  format.js {render inline: "location.reload();" }
end
Run Code Online (Sandbox Code Playgroud)


Sho*_*hit 9

从Rails 5(或者可能是旧版本)开始,你就有了一个request.referrer方法.您只需从控制器重定向到引用者,它将打开请求来自的页面.

redirect_to request.referrer, notice: "You're being redirected"


Kir*_*ich 5

Rails 5 引入了替代功能:

redirect_back(fallback_location: root_path)
Run Code Online (Sandbox Code Playgroud)

只要 HTTP_REFERER 已知,它就会重定向回来。否则它会重定向到 fallback_location。

redirect_to :back是在5.0的Rails弃用https://github.com/rails/rails/pull/22506和去除,因为导轨5.1