30

我有一个列表页面,然后是一个表格,然后是一个感谢页面。我需要在感谢页面上放置一个链接,该链接将用户带回他们在表单之前所在的页面,该页面总是变化的。我试过用这个:

= link_to "Back", :back

但这只会让他们回到上一页,所以表单。

4

6 回答 6

56

尝试这个

<%= link_to 'Back', url_for(:back) %>
# if request.env["HTTP_REFERER"] is set to "http://www.example.com"
# => http://www.example.com

这里有更多细节。

于 2014-07-07T20:36:08.990 回答
20

好吧,您可以在表单页面中设置一个方法来收集该 url。基本思想是使用自定义会话变量来存储以前的 url 并将其保留到下一个会话。

假设您的表单的操作是 SomeController#new,那么

class SomeController < ApplicationController
  after_action "save_my_previous_url", only: [:new]

  def save_my_previous_url
    # session[:previous_url] is a Rails built-in variable to save last url.
    session[:my_previous_url] = URI(request.referer || '').path
  end

end

然后在感谢页面中,您可以my_previous_url通过

 session[:my_previous_url]

这应该能够适合您的情况,两页前的上一个网址。

免责声明:这未经验证。想法而已。

添加

会话属于控制器。它不是您可以直接在视图中使用的助手。您需要在控制器中定义一个实例变量,然后您可以在视图中使用它。像这样

# Controller
@back_url = session[:my_previous_url]
 
# View
<%= link_to "Back", @back_url %>
于 2013-04-25T11:38:27.180 回答
12

您可以使用 Rails API 中的示例:

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

用于 link_to 的 Rails API 文档

使用 :back 符号而不是选项哈希将生成指向引荐来源网址的链接(如果不存在引荐来源网址,将使用 JavaScript 反向链接代替引荐来源网址)。

于 2017-01-16T15:38:27.113 回答
1

既然你说,它可能是表单之前的不同页面,可能 request_url 可以帮助你。您可以将您的 request_url 保存在一个参数中并重定向到 param_url(如果有)。

这是您可以参考的来源。 http://programming-tut.blogspot.com/2010/06/ruby-on-rails-request-url.html

于 2013-04-25T11:33:26.080 回答
0

如果在Controller中使用,可以直接这样使用:

def some_action
  # some code
  redirect_to :back
end
于 2015-08-05T09:52:19.260 回答
0

这对我有用:

在先前视图的控制器中:

cookies[:original_referrer] = request.orignal_url

使用原始页面的 URL 在浏览器上设置 cookie

在当前视图的控制器中:

redirect_to cookies[:original_referrer]
于 2017-05-16T16:24:50.087 回答