RoR - 从 ActionController::Parameters 中删除数组元素

RoR - Removing an array element from ActionController::Parameters

在我的 Rails 3.2 应用程序中,我在控制器中获取 params 变量,如下所示:

params.class         => ActionController::Parameters
params[:a].class     => ActionController::Parameters
params[:a][:b].class => Array
params[:a][:b]       => ['1', '2', '3', '4']

当我尝试删除数组中的值时,它没有正确反映。

例如

params[:a][:b].delete('1') 
=> "1"

但是我再次查询的时候,没有任何变化

params[:a][:b]   => ['1', '2', '3', '4']

虽然,如果我将它重新分配给一个变量,它工作正常。

arr = params[:a][:b]
arr.delete('1')
=> "1"

arr
=> ['2', '3', '4']

知道为什么我不能直接更新 params 对象吗?

params[:a][:b].tap { |ary| ary.delete('1') }
#=> ['2', '3', '4']

要更改 params[:a][:b] 的值,您需要为其分配一个新值:

params[:a][:b] = params[:a][:b].tap { |ary| ary.delete('1') }