【发布时间】:2017-01-19 20:33:20
【问题描述】:
在我的 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值吗? -
我无法重现这个:
params[:a][:b] == ['1', '2']; params[:a][:b].delete('1'); params[:a][:b] == ['1', '2']。我怀疑你已经覆盖了一些有趣的东西,而params所做的事情超出了我的预期。你能发布完整的、相关的、控制器代码吗?理想情况下是可重现的。 -
当你
arr = params[:a][:b] ; arr.delete('1'); params[:a][:b] = arr; params[:a][:b]时会发生什么? -
你确定你有 3.2 rails 应用程序吗? AFAIR
ActionController::Parameters在 rails 4 中引入。在 3.2 中,参数应具有以下类ActiveSupport::HashWithIndifferentAccess -
你搞定了吗?
标签: ruby-on-rails arrays ruby ruby-on-rails-3 actioncontroller