2012-07-09 113 views
1

我正在使用多个重定向,我想从A-> B-> C-> A重定向。Ruby on Rails:如何为变量赋值?

因此,在B,我保存路径A作为

@previouspage = request.referer 

等@previouspage = A在这一点上,但是当我在调用C @previouspage,它不带保存在B中的硬值,但发现自己的相对request.referer,这是B.

所以在C,@previouspage = B(因为我觉得在Ruby中的变量是软链接)

我怎么会只保存任何价值的request.referer在B点,然后将该URL保存到我可以访问lat的变量中呃?

+0

你不觉得最好是在会话中保存你的值吗? – 2012-07-09 11:41:48

+0

@VincentPaca将它保存在会话中并没有防止存储的值发生变化.. :(看到我的要点 – kibaekr 2012-07-09 12:23:39

回答

2

请求之间不保留Rails变量。如果你想节省一些数据,你应该:

  • 将它保存在一个(会话)的cookie
  • 保存在数据库中
  • 拉一些技巧,你的袖子,并通过引荐作为参数或类似的东西,但它不被推荐。
3

HTTP是一种无状态协议:变量不会在请求之间记住。如果你想在请求之间保存状态,那么你可以使用会话。在Rails是这样完成的:

在B:

session[:page_a] = request.referer 

在C:

@next_page = session[:page_a] 

Rails Security Guide开始会话和他们的漏洞。你可能想看看它。

+0

我试过了,但是“@next_page”仍然试图找到它自己的request.referer,碰巧是B.我使用了看看变量的值是什么,在B中,session [:page_a]存储我需要的(A),但@next_page将值更改为B,而不是A. – kibaekr 2012-07-09 11:50:58

+0

这里是要点和日志,显示会话[:page_a]会在用户登录后发生变化。https://gist.github.com/3076131 – kibaekr 2012-07-09 12:15:16

+0

我的猜测是你也在C中指定'session [:page_a]'C – seph 2012-07-09 13:03:57

2

三件事情需要得到这方面的工作

  • 使用会话:会话[:ORIGINAL_PAGE] = request.referrer
  • 占的事实,会议得到登录后刷新(检查是否无)
  • 记住在控制器中使用它后立即设置session [:original_page] = nil。
+0

好吗谢谢!我会热切地等待:) – kibaekr 2012-07-09 15:42:28

+0

顺便说一句,你有完整的代码在github上吗?可能会更容易自己运行它。我的脑袋正在旋转,试图在纸上这样做! – 2012-07-09 15:44:23

+0

完整的代码是在一个私人的回购;如果没有整个代码,这太难了吗? – kibaekr 2012-07-09 16:03:49