首页 > 解决方案 > 如何通过在 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

我如何循环一个数组以便我的参数被替换。?参数没有被上面的代码替换。任何提示将不胜感激。谢谢

标签: ruby-on-railsarraysrubyparameters

解决方案


我想你会想要这样的东西:

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"}

如果您有任何问题,请告诉我 - 希望这会有所帮助。


推荐阅读