在以下代码中,会话变量数组正在通过对实例变量的操作进行更改。我怎样才能阻止这种情况发生?
logger.debug session[:nav_ids].count # => 30
@ids = session[:nav_ids]
@ids.shift(10)
logger.debug session[:nav_ids].count # => 20
答案 0 :(得分:1)
您可以克隆或复制ID:
@ids = session[:nav_ids].clone
现在,您可以更改@ids
而不会影响session[:nav_ids]
。
答案 1 :(得分:0)
您声明实例变量@ids
的方式,您只是指向会话[:nav_ids]。
您应该创建一个新数组:
@ids = Array.new(session[:nav_ids])
......或像@zwippie那样的克隆建议。