2013-08-19 3 views
2

Я сохраняю строку цены в моей базе данных в столбце десятичного типа. Цена приходит как «$ 123.99», что хорошо, потому что я написал немного кода, чтобы удалить «$» (знак доллара и пробел). Однако, похоже, я забыл, что цена может включать запятую. поэтому «$ 1,234,99» разбивает мой код. Как я могу удалить запятую?

Это мой код, чтобы удалить знак доллара и пространство:

def price=(price_str) 
    write_attribute(:price, price_str.sub("$ ", "")) 
    # possible code to remove comma also? 
end 
+2

Лучшей практикой является сохранение цены в виде номера, а затем форматирование ее по мере необходимости в зависимости от вида (с помощью «$» или того, что вам нужно). Это вариант? – lurker

+0

Согласовано. Цена - это тип стоимости, которую вы можете математически суммировать или манипулировать. Он должен быть числовым. –

ответ

4

Вы можете получить там два пути легко.

delete строковый метод является хорошим для удаления всех вхождений целевых строк:

'$ 1.23'.delete('$ ,') # => "1.23" 
'$ 123,456.00'.delete('$ ,') # => "123456.00" 

Или используйте String's tr метод:

'$ 1.23'.tr('$, ', '') # => "1.23" 
'$ 123,456.00'.tr('$ ,', '') # => "123456.00" 

tr принимает строку символов для поиска и строка символов, используемых для их замены. Рассмотрим цепочку из gsub методов, по одному для каждого символа.

BUT WAIT! ЕСТЬ БОЛЬШЕ! Если строка замены пуста, все символы в строке поиска будут удалены.

+0

О, ладно, сладкий! Поэтому я мог бы определить это как метод и запустить его перед сохранением? –

+0

или я мог бы просто бросить его туда –

+1

Я бы, вероятно, сделал это встроенным или массировал значение внутри метода 'price ='. Однако я бы не создал отдельный метод для этого. –

Смежные вопросы