实例变量更改会影响Rails会话

时间:2014-10-20 18:40:01

标签: ruby-on-rails ruby-on-rails-3 session-variables

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

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

2 个答案:

答案 0 :(得分:1)

您可以克隆或复制ID:

@ids = session[:nav_ids].clone

现在,您可以更改@ids而不会影响session[:nav_ids]

答案 1 :(得分:0)

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

您应该创建一个新数组:

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

......或像@zwippie那样的克隆建议。