Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 链接回表单之前访问的页面_Ruby On Rails_Url_Redirect_Request_Refer - Fatal编程技术网

Ruby on rails 链接回表单之前访问的页面

Ruby on rails 链接回表单之前访问的页面,ruby-on-rails,url,redirect,request,refer,Ruby On Rails,Url,Redirect,Request,Refer,我有一个列表页面,然后是表格,然后是感谢页面。我需要在“谢谢”页面上添加一个链接,将用户带回到表单之前的页面,该页面总是变化的。我试过用这个: = link_to "Back", :back 但这只会让他们回到上一页,所以表单。既然你说,表单之前的页面可能不同,那么请求url可能会帮助你。您可以将您的请求url保存在参数中,并重定向到参数url(如果有) 这里有一个你可以参考的资料。 好的,您可以在表单页面中设置一个方法来收集该url。其基本思想是使用自定义会话变量存储上一个url,并将其保存

我有一个列表页面,然后是表格,然后是感谢页面。我需要在“谢谢”页面上添加一个链接,将用户带回到表单之前的页面,该页面总是变化的。我试过用这个:

= link_to "Back", :back

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

既然你说,表单之前的页面可能不同,那么请求url可能会帮助你。您可以将您的请求url保存在参数中,并重定向到参数url(如果有)

这里有一个你可以参考的资料。

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

假设表单的操作是新的

这应该能够适合您的情况,前两页的url

免责声明:未经验证。只有一个想法

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

# Controller
@back_url = session[:my_previous_url]
 
# View
<%= link_to "Back", @back_url %>
#控制器
@后退\u url=会话[:我的上一个\u url]
#看法
试试这个

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

#如果request.env[“HTTP_REFERER”]设置为“http://www.example.com"
# => http://www.example.com

如果在控制器中使用,您可以这样直接使用:

def some_action
  # some code
  redirect_to :back
end

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

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

使用:back符号而不是options散列将生成指向referer的链接(如果不存在referer,将使用JavaScript反向链接代替referer)

这对我很有用:

在上一视图的控制器中:

cookies[:original_referrer] = request.orignal_url
在浏览器上使用原始页面的URL设置cookie

在当前视图的控制器中:

redirect_to cookies[:original_referrer]

您可以看看这个问题:您的表单是否有错误处理?如果是这样,当你犯错误时会发生什么?如果没有,那就公平了。您好,这看起来应该行得通,我已经使用了它,并稍微修改了一下,但是感谢页面上的链接呈现如下:
@user1738017,为什么是Javascript?为什么不在控制器中获取这个会话变量并在模板中输出它呢?我已经更改了它,所以模板中的代码是:
=link_to“Back”,“{session[:my_previouse_url]}”
,但它仍然有一个空的link@user1738017不是这样的。请检查我的更新答案。@user1738017,在模板中添加
,查看
my_previous_url`和
previous_url
的外观,然后尝试将
after_filter
更改为
before_filter
或直接调用该方法,只需尝试。提交表单后,此解决方案不起作用。另外,(:back)
url\u和
:back
之间有什么区别?太棒了,这应该是官方的答案:)
足够了,这会引导用户返回他们刚刚提交的表单。OP想知道如何跳回两页,基本上在新表单/编辑表单之前到达页面。
cookies[:original_referrer] = request.orignal_url
redirect_to cookies[:original_referrer]