Сохраните Базу данных нормализованной, ПОКА Вы не обнаружили узкое место. Затем только после того, как тщательное профилирование должно Вы денормализовывать.
В большинстве экземпляров, имея хороший закрывающий набор индексов и актуальной статистики решит большую часть производительности и блокирующихся проблем без любой денормализации.
Используя единственную таблицу мог привести к худшей производительности, если существуют записи, а также чтения против нее.
Вы можете использовать number_to_phone (number, options = {})
метод из ActionView :: Helpers :: NumberHelper
Однако в документации указывается, что этот метод форматирует число в номер телефона в США (например, (555) 123-9876).
Вместо этого вы можете использовать этот патч , который добавляет возможность группировки номеров:
:groupings - Specifies alternate groupings
(must specify 3-element array; defaults to [3, 3, 4])
Итак, в вашем случае вы должны позвонить:
number_to_phone('0541754301', :groupings => [4, 3, 3], :delimiter => "-")
, чтобы произвести:
0541-754-301
Вы можете использовать регулярное выражение для переформатирования строки. Для приведенного вами примера:
"0541754301".sub(/(\d{4})(\d{3})(\d{3})/, "\\1-\\2-\\3") # returns: "0541-754-301"