I have searched and it looks like this should be simple but I can't get it to work. I am trying to remove all non-numeric characters prior to saving a phone number. This is what I have currently:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/\D/, '').to_i }
So if a user inputs
925-555-5555
It should save 9255555555 but it is actually saving only 925 and ignoring everything after
I also tried:
before_save { |workorder| workorder.phonenumber =
phonenumber.to_s.gsub(/[^0-9]/, "").to_i }
with the same result.
Solved:
def raw_phonenumber
self.phonenumber
end
def raw_phonenumber=(s)
self.phonenumber=s.gsub(/\D/, '')
end
You certainly have defined the phonenumber
column as number. That's why when you set '925-555-5555'
in the phonenumber
attribute, it is casted to a number, and only 925
is kept.
The best solution is to change the type of the column in your database to string
. Create a new migration:
change_column :table_name, :phonenumber, :string, limit: 30
Otherwise, you can override the setter like this to remove the non numeric characters (but it won't fix phone numbers starting with '0's):
def phonenumber=(phonenumber)
write_attribute(:phonenumber, phonenumber.gsub(/\D/, ''))
end
More alternatives in this blog post
The easiest way to do it is by mutating the field=
method:
def field=(value)
super(value.delete('^0-9'))
end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With