RubyonRails:如何给变量赋值?

RubyonRails:如何给变量赋值?,ruby,ruby-on-rails-3,variables,routing,variable-assignment,Ruby,Ruby On Rails 3,Variables,Routing,Variable Assignment,我正在使用多个重定向,我想从A->B->C->A重定向 所以在B中,我将路径A保存为 @previouspage = request.referer 此时@previouspage=A,但当我在C中调用@previouspage时,它不会带来保存在B中的硬值,而是找到它自己的相对request.referer,即B 所以在C中,@previouspage=B,因为我认为Ruby中的变量是软链接 我如何保存request.referer在点B的值,然后将该URL保存到一个变量中,以便以后访问?请

我正在使用多个重定向,我想从A->B->C->A重定向

所以在B中,我将路径A保存为

@previouspage = request.referer
此时@previouspage=A,但当我在C中调用@previouspage时,它不会带来保存在B中的硬值,而是找到它自己的相对request.referer,即B

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


我如何保存request.referer在点B的值,然后将该URL保存到一个变量中,以便以后访问?

请求之间不保留Rails变量。如果要保存某些数据,应:

将其保存在会话cookie中 保存在数据库中 从你的袖子里拿出一些技巧,把referer作为一个参数或类似的东西传递出去,但这根本不推荐。
Rails变量不会在请求之间保留。如果要保存某些数据,应:

将其保存在会话cookie中 保存在数据库中 从你的袖子里拿出一些技巧,把referer作为一个参数或类似的东西传递出去,但这根本不推荐。
HTTP是一种无状态协议:请求之间不会记住变量。如果希望在请求之间保存状态,则可以使用会话。在Rails中,它是这样完成的:

在B中:

在C中:


从会话及其漏洞开始。您可能想查看它。

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

在B中:

在C中:


从会话及其漏洞开始。您可能想查看它。

要使它正常工作,需要三件事

使用会话:会话[:原始页面]=request.referer 考虑登录后会话被刷新的事实检查是否为nil 在控制器中使用会话[:original_page]=nil后,请记住将其设置为nil。
需要三件事才能让它工作

使用会话:会话[:原始页面]=request.referer 考虑登录后会话被刷新的事实检查是否为nil 在控制器中使用会话[:original_page]=nil后,请记住将其设置为nil。

您不认为在会话中保存值更好吗?@VincentPaca在会话中保存值并不能阻止存储值的更改..:看到我下面的要点了吗?你不觉得在会话中保存值更好吗?@VincentPaca在会话中保存值并不能阻止存储值的更改..:请看下面我的要点我尝试了这个,但是@next_page仍然试图找到它自己的请求。referer,恰好是B。我使用put来查看变量的值,在B中,会话[:page_a]存储我需要的a,但是@next_page将值更改为B,而不是a。下面是显示该会话的要点和日志[:page_a]用户登录后的更改。我猜您也在分配CI中的会话[:page_a]尝试了这个,但是@next_page仍然试图找到它自己的request.referer,它恰好是B。我使用puts查看变量的值,在B中,会话[:page_a]存储我需要的a,但是@next_page将值更改为B,不是A。这是要点和日志,显示用户登录后会话[:page_A]发生变化。我猜您也在Cbtw中分配会话[:page_a],您在github上有完整的代码吗?我自己可能会更容易运行它。我的脑袋在转,试图在纸上做这件事!完整代码在私人回购协议中;没有完整的代码做这件事太难了吗?哦,不用担心。在筛选之前,我很难确定商店位置会影响哪些操作。任务控制员的所有行动是什么?以下是任务控制器的完整文件:。我想你可能是对的,它刷新了会话,因为我基本上是告诉after_sign_in_路径转到一个操作,该操作将调用before_筛选器:store_location。你是否在MissionController外部使用“store_location”before筛选器?顺便问一下,你有没有考虑过让用户“登录投票”呢?不要故意干涉你的设计决策!只是好奇。即使不是before_过滤器,我也不确定您是否可以保留用户登录会话之前的路径。顺便问一下,您在github上有完整的代码吗?我自己可能会更容易运行它。我的脑袋在转,试图在纸上做这件事!完整代码在私人回购协议中;没有完整的代码做这件事太难了吗?哦,不用担心。在筛选之前,我很难确定商店位置会影响哪些操作。任务控制员的所有行动是什么?以下是任务控制器的完整文件:。我想你可能是对的,它刷新了会话,因为我基本上是在告诉after_sign_in_路径去一个动作,这将调用befo
re_筛选器:store_location。在任务控制器外部筛选之前,是否使用“store_location”?顺便问一下,你有没有考虑过让用户“登录投票”呢?不要故意干涉你的设计决策!只是好奇。即使不是before_筛选器,我也不确定您是否可以保留用户登录会话之前的路径
session[:page_a] = request.referer
@next_page = session[:page_a]