это должно быть в вашей модели. Модель FAT, контроллер SKINNY:
# contact.rb
...
# may need require 'phony' and include Phony
before_save :prep
def prep
self.fax = 1+Phony.normalize(self.fax) unless self.fax.empty? || (self.fax.length == 11 && self.fax[0] == 1)
self.phone = 1+Phony.normalize(self.phone) unless self.phone.empty? || (self.phone.length == 11 && self.phone[0] == 1)
end
...
Edit:
Как я уже упоминал в своем комментарии, с точки зрения хранения и эффективности, а также индексации лучше хранить в качестве базы данных bigint unsigned в вашей базе данных и добавлять красивость к числам в методе. Таким образом, ваш сайт всегда нормализуется (никакие два телефонных номера не будут выглядеть по-разному, потому что они отформатированы «на лету»).
# sample methods
def phony
str = self.phone.to_s
"#{str[0..2]}-#{str[3..5]}-#{str[6..10]}"
end
# use a similar method for faxing, but I'll write
# this one differently just to show flexibility
def faxy
str = self.fax.to_s
"+1 (#{str[0..2]}) #{str[3..5]}-#{str[6..10]}"
end