2012-07-09 128 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