RoR - 从ActionController :: Parameters

时间:2016-09-12 11:53:30

标签: ruby-on-rails arrays ruby ruby-on-rails-3 actioncontroller

在我的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']

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

e.g。

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对象吗?

1 个答案:

答案 0 :(得分:2)

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') }