链接返回到表单之前访问的页面

use*_*017 26 url redirect ruby-on-rails request refer

我有一个列表页面,然后是表单,然后是感谢页面.我需要在感谢页面上添加一个链接,该链接将用户带回到他们所在的页面之前,该表单始终有所不同.我试过用这个:

= link_to "Back", :back
Run Code Online (Sandbox Code Playgroud)

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

小智 54

试试这个

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

这里有更多细节.

  • `<%= link_to'Back',:back%>`就够了 (5认同)
  • 提交表单后,此解决方案无效.另外,`url_for(:back)`和`:back`有什么区别? (2认同)

Bil*_*han 18

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

假设你的表单的动作是SomeController #new,那么

class SomeController < ApplicationController
  after_filter "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
Run Code Online (Sandbox Code Playgroud)

然后在感谢页面,你可以得到这个my_previous_url通过

 session[:my_previous_url]
Run Code Online (Sandbox Code Playgroud)

这应该能够适合你的情况,两页前的前一个网址.

免责声明:未经核实.只有想法.

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

# Controller
@back_url = session[:my_previous_url]

# View
<%= link_to "Back", @back_url %>
Run Code Online (Sandbox Code Playgroud)


ilg*_*gam 8

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

<%= link_to "Back", :back %>
Run Code Online (Sandbox Code Playgroud)

用于link_to的Rails API文档

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