Я думаю, вы захотите что-то вроде этого:
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
EG
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"}
Дайте мне знать, как вы поживаете, или если у вас есть какие-либо вопросы - надеюсь, это поможет.