Search code examples
ruby-on-railsrubyactiverecordtrimstrip

ActiveRecord: make all text fields have strip called on them before saving, unless specified otherwise


I've ran into various problems with various sites over the years with users putting spaces at the start/end of string and text fields. Sometimes these cause formatting/layout problems, sometimes they cause searching problems (ie search order looking wrong even though it isn't really), sometimes they actually crash the app.

I thought it would be useful, rather than putting in a bunch of before_save callbacks as i have done in the past, to add some functionality to ActiveRecord to automatically call .strip on any string/text fields before saving, unless i tell it not to, eg with do_not_strip :field_x, :field_y or something similar at the top of the class definition.

Before i go and figure out how to do this, has anyone seen a nicer solution? Just to be clear, i already know that i can do this:

before_save :strip_text_fields

def strip_text_fields
  self.field_x.strip!
  self.field_y.strip!
end

but i'm looking for a nicer way.

cheers, max


Solution

  • I've written a plugin for this purpose some time ago. I haven't tried it in a while and it doesn't have tests - so no guaranties that it still works. The upside would be a clean model:

    class Story < ActiveRecord::Base
      strip_strings :title, :abstract, :text
    end