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