2014-10-20 62 views
1

在以下代码中,会话变量数组正在通过对实例变量的操作进行更改。我怎样才能阻止这种情况发生?实例变量更改会影响Rails会话

logger.debug session[:nav_ids].count # => 30 
@ids = session[:nav_ids] 
@ids.shift(10) 
logger.debug session[:nav_ids].count # => 20 
+0

停止修改您在会话中引用的变量吗?您正在为会话值设置* reference * - 它不是一个单独的对象。如果你想在副本上操作,你可以克隆它。 – 2014-10-20 18:45:05

回答

1

你可以克隆或DUP IDS:

@ids = session[:nav_ids].clone 

现在你可以改变@ids不影响session[:nav_ids]

0

你声明实例变量@ids的方式,你只是指向session [:nav_ids]。

你应该创建一个新的数组:

@ids = Array.new(session[:nav_ids]) 

...或克隆一样@zwippie建议。