1
在以下代码中,会话变量数组正在通过对实例变量的操作进行更改。我怎样才能阻止这种情况发生?实例变量更改会影响Rails会话
logger.debug session[:nav_ids].count # => 30
@ids = session[:nav_ids]
@ids.shift(10)
logger.debug session[:nav_ids].count # => 20
在以下代码中,会话变量数组正在通过对实例变量的操作进行更改。我怎样才能阻止这种情况发生?实例变量更改会影响Rails会话
logger.debug session[:nav_ids].count # => 30
@ids = session[:nav_ids]
@ids.shift(10)
logger.debug session[:nav_ids].count # => 20
你可以克隆或DUP IDS:
@ids = session[:nav_ids].clone
现在你可以改变@ids
不影响session[:nav_ids]
。
你声明实例变量@ids
的方式,你只是指向session [:nav_ids]。
你应该创建一个新的数组:
@ids = Array.new(session[:nav_ids])
...或克隆一样@zwippie建议。
停止修改您在会话中引用的变量吗?您正在为会话值设置* reference * - 它不是一个单独的对象。如果你想在副本上操作,你可以克隆它。 – 2014-10-20 18:45:05