Если вы делаете это только для нескольких полей, проще всего сделать это с помощью пользовательских сеттеров:
def phone_number=(val)
self[:phone_number] = val.rstrip
end
Но если вам нужна более общая и удобная настройка, яЯ бы предложил написать расширение ActiveRecord - что-то вроде:
class ActiveRecord::Base
def self.strips_trailing_spaces_from(*attrs)
@@sts_attrs ||= []
@@sts_attrs << attrs
before_save :strip_trailing_spaces
end
def strip_trailing_spaces
@@sts_attrs.each do |attr|
val = self[attr]
self[attr] = val.rstrip if val.is_a?(String)
end
end
end
И затем для каждой модели, которую вы хотите использовать, вы можете просто вызвать (стиль "макро" Rails):
class MyModel < ActiveRecord::Base
strips_trailing_spaces_from :phone_number, :name, :pizza, :etc
# ...classy stuff...
end
Примечание. Этот код не был протестирован, но он должен быть понятен.Надеюсь, это поможет!