首页 > 解决方案 > 在保存之前更改参数哈希中的值?

问题描述

由于某种原因,这不起作用

user_params[:height] = user_params[:height].to_i * 100
User.new(user_params)

它只是将“height”参数保存为 1.8,而它应该是 180(换句话说,它没有按照代码指示进行更改)。

我们如何在保存 params 哈希之前简单地更改 params 哈希中的参数?

我试过的

我试过上面的

我也试过user_params[:height] = (user_params[:height].to_i * 100).to_s了,但也没有用。

我可以确认它适用于普通哈希:

h = {a: 1, b: 2}
=> {:a=>1, :b=>2}

h[:a] = h[:a] * 10
=> 10

h
=> {:a=>10, :b=>2}

所以我无法弄清楚为什么它不适用于 params 哈希

标签: ruby-on-railsruby-on-rails-6strong-parameters

解决方案


这不是一个正确的答案,因为我无法解释它为什么起作用,但我必须创建一个新的哈希才能让它起作用:

替换这个:

user_params[:height] = user_params[:height].to_i * 100
User.new(user_params)

有了这个:

u = user_params.to_h
u[:height] = u[:height].to_i * 100
User.new(u)

然后它按预期工作


推荐阅读