Способ, который вы могли бы сделать, - создать задачу rake для обновления существующих записей в системе.
namespace :update do
desc 'Strip space from existing numbers from Users'
task(:number => ::environment) do
space = ' '
numbers_with_space = User.where("number like ?", "%#{space}%")
numbers_with_space.each do |a|
a.number = a.number.gsub!(/\s+/, '')
a.save(validate: false) # You would like to use
# validate false in order
# to stop other validation from updating the record.
end
end
Затем выполните грабли.
bundle exec rake update:number
Еще один способ сделать это заранее - переформатировать номер во время проверки. Таким образом, вам не нужно будет запускать задачу или код rake для переформатирования и сохранения при вводе новых данных в приложение.
class User < ApplicationRecord
before_validation :reformat_number, on: [:create, :update]
private
def reformat_number
self.number.gsub!(/\s+/, '')
end
end