Мы делали это так часто, что написали расширение для String
, которое называется cost_to_f
:
class String
def cost_to_f
self.delete('$,').to_f
end
end
Мы храним такие расширения в config/initializers/extensions/string.rb
.
Вы можете просто позвонить:
"$5,425.55".cost_to_f #=> 5425.55
Если вы редко используете этот метод, лучше всего просто создать функцию, так как добавление функций в базовые классы не совсем то, что я бы порекомендовал слегка:
def cost_to_f(string)
string.delete('$,').to_f
end
Если вам это нужно в более чем одном классе, вы всегда можете поместить его в модуль, а затем include
в тот модуль, где вам это нужно.
<ч />
Еще один лакомый кусочек. Вы упомянули, что вам нужно обработать эту строку, когда она записывается в базу данных. С ActiveRecord лучший способ сделать это:
class Item < ActiveRecord::Base
def price=(p)
p = p.cost_to_f if p.is_a?(String)
write_attribute(:price, p)
end
end
<ч />
РЕДАКТИРОВАТЬ : Обновлено для использования String#delete
!