ruby-on-rails - 如何通过在 ruby 中循环参数来替换参数?
问题描述
我有一个参数数组,我想通过在 ruby on rails 中循环数组来替换所有参数。
我在控制器中使用 before_action 作为
before_action :cost_format
这是一个参数数组。参数的格式是字符串,我想对每个参数运行一个函数并将其转换为浮点数。所以我正在循环一个数组并在每个元素上调用函数。
def cost_format
x = [params[:cost_1], params[:cost_2], params[:cost_3]]
x.each do |i|
convert_cost(i)
end
end
我有一个函数 convert_cost 如下
def convert_cost(x)
x.gsub(',', '.').to_f
end
我如何循环一个数组以便我的参数被替换。?参数没有被上面的代码替换。任何提示将不胜感激。谢谢
解决方案
我想你会想要这样的东西:
def cost_format
%i(cost_1 cost_2 cost_3).each do |key|
params[key] = convert_cost(params[key])
end
end
def convert_cost(val)
val.gsub(',', '.').to_f
end
这会从您的每个键中获取每个键,params
并用通过该convert_cost
方法传递的值替换该值。
convert_cost
编辑:如果它适用于您输入数字的格式,您可能可以忽略有关到期的这部分。请原谅我的种族中心主义 :)
我还没有更新你的convert_cost
方法,虽然我对它是否会起作用有点担心。例如,如果你有,"1,234,567"
并且你调用你的gsub
你得到"1.234.567"
。打电话to_f
给你1.234
,我不认为你会想要?
取而代之的是,您可以使用:
def convert_cost(val)
val.gsub(',', '').to_f
end
例如
convert_cost("1,234,567")
# => 1234567.0
结合所有这些,以下内容将被转换为:
params = { cost_1: "1,234,567", cost_2: "123", cost_3: "456.5", cost_4: "I won't be touched" }
# after `cost_format` before_action runs:
# => {:cost_1=>1234567.0, :cost_2=>123.0, :cost_3=>456.5, :cost_4=>"I won't be touched"}
如果您有任何问题,请告诉我 - 希望这会有所帮助。
推荐阅读
- python-3.x - 如何在后台运行机器学习训练?
- gitlab - GITLAB CI:文件外壳无法获取环境变量
- sockets - TCP socket server 使用 in6addr_any,client 无法连接使用 c,只使用本地 ipv6
- r - R中的条件嵌套IF
- python-3.x - 在 Python scikit learn 中为 12 个随机森林创建循环
- amazon-web-services - 如何使用 Docker 在 Airflow 中使用 .env 变量设置 S3 连接?
- informatica - SUBSTR 在 informatica 中
- sql - 按顺序加入 2 个表
- java - Java:澄清“长期选择的争论”场景
- email - 当谷歌表格中的字符串匹配时如何使用谷歌应用程序脚本发送电子邮件警报(单元格更改未编辑)