Ruby on Rails中的“后退”浏览器操作

74

在Rails的“返回”链接中是否可以调用浏览器的“返回”功能?

10个回答

217

使用

<%= link_to 'Back', :back %>

这在 RDoc 中有具体说明,点击这里

这将生成一些 JavaScript 以便向后导航。我已经测试过了,它能够正常工作。


11
它不完全像一个“返回”按钮那样工作。所有输入的表单数据都将被清除。 - alamodey
1
是的,我觉得这只能让大多数人走了一半路。如果你真的想要模拟后退按钮,那么你也需要保留所有先前的参数。 - ohhh
4
request.referer存在时,不会使用 javascript:history.back() - rthbound
7
如果两个页面都有这个返回按钮,那么用户可能只会在这两个页面之间来回切换,而不是实际上遍历整个浏览历史记录。 - wuliwong
1
在表单提交失败和类似情况下,这可能会给用户体验带来噩梦,因为用户期望返回按钮能够带他们回到之前的页面。 - karns

27
在Rails 3及之前版本中:
link_to_function "Back", "history.back()"

在Rails 4中,这个方法已被移除。请参考Andreas的评论。


6
请注意,link_to_function在Rails 4.1中已经被弃用。更多信息请参考:https://dev59.com/BGYq5IYBdhLWcg3woCG7 - Andreas
如果你在Rails 4.1+中仍然尝试使用link_to_function,你会遇到一个错误信息:undefined method 'link_to_function' for #<#<Class - Jay Killeen
我目前正在使用Rails 4.2.5.1。我发现我需要将Javascript作为选项哈希中的onclick: 'history.back()'发送,而不是在URL参数中发送(当我尝试在Firefox中使用时,它无效)。 - starfry

21

这在Rails 5.1中与Turbolinks一起工作。

link_to 'Back', 'javascript:history.back()'

12
在Rails 4.2中,我用以下方式使其工作:
<a href="javascript:history.back()">Refine Search</a>

我从@cpm的答案中抄袭了这个,只是当我粘贴生成的代码<a href="javascript:history.back()">Refine Search</a>时,link_to("Refine Search", :back)不能完成我想要的工作,而它可以完美地完成。


1
是的,link_to("Refine Search", :back) 只会保存最后一个没有参数的操作,并将您带回那里,而您的解决方案使用了js。 - ohhh
@ohhh 我也遇到了同样的问题:undefined method `stringify_keys' for :back:Symbol。 - facundofarias
@facundofarias,这听起来不相关,你的link_to的确切语法是什么? - ohhh
@ohhh 这是:link_to("测试", :back) - facundofarias
@facundofarias,你肯定没有传递一个块给它? - ohhh

11
您可以使用link_to("Hello", :back)来生成<a href="javascript:history.back()">Hello</a>

在大多数情况下,它将使用引荐者返回。如果没有引荐者,则会执行 javascript:history.back()。已检查来自 Rails 3.0 - 6.1 的代码。 - notapatch

3

这将与浏览器的后退按钮类似,请试一下:

<%= link_to '返回', 'javascript:history.go(-1);' %>


2

注意用户rthbound评论!正如他所指出的那样,使用符号:backlink_to并不总是生成一个“真正”的后退事件,就像用户单击浏览器的后退按钮一样。它也可能是重新提交加载当前视图的操作。

Rails4.2.6文档关于link_to和符号:back的解释如下:

使用:back符号代替选项哈希将生成一个链接到引用页(如果不存在引用页,则将使用JavaScript后退链接)。


0
如果您不想使用link_to "cancel", :back,则可以实现一个帮助方法来链接到记录的索引路径或显示路径(即teams_pathteam_path(@team))。
module CancelFormButtonHelper
  def cancel_button(record)
    index_path = record.class.to_s.pluralize.downcase + "_path"
    path = record.persisted? ? record : eval(index_path)

    link_to "Cancel", path
  end
end

然后可以在表单中使用<%= cancel_button @team %>,例如。


0

Rails <= 4.0

使用

link_to_function "Back", "history.back()"

看起来与在浏览器中点击返回按钮完全相同。当您回到时,所有输入的表单数据仍然存在。


0

你可以使用JS函数window.history.back()。

 = link_to 'Back', onclick: "window.history.back();"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接