ruby-on-rails - 在保存之前更改参数哈希中的值?
问题描述
由于某种原因,这不起作用
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 哈希
解决方案
这不是一个正确的答案,因为我无法解释它为什么起作用,但我必须创建一个新的哈希才能让它起作用:
替换这个:
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)
然后它按预期工作
推荐阅读
- rhino - Rhino Javascript JSON 对象
- dart - 如何从正在侦听飞镖中的某些流的函数返回字符串?
- asynchronous - 阻塞获取 aio_pika
- mysql - 使用 MySQL utf8 排序规则的仓颉字符的字符串值不正确(支持 4 字节)
- javascript - 等待点击直到元素被渲染
- python - 提及作者 Python Bot
- java - Groovy 按更多标准分组
- java - Java - 如何使用类型安全枚举作为 switch-case 语句?
- c++ - 用于链接 opencv.framework 的 Makefile(我没有使用 cmake)
- python - 如何使 Python 在 Windows 上使用 `open()` 默认使用 UTF8?