2014-10-20 64 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建議。