I’m not sure if this is what you are after (haven’t woken up), but I wrote a little plugin that would nil empty strings before saving the record. I’ve been using this for over a year without issue.
**Note This is an extract of my model_utils plugin so double check it for errors:
module ModelUtils
def self.included(base)
base.send :include, Stone::ModelUtils::InstanceMethods
base.before_validation{|model|
model.nil_empty_fields
}
end
model InstanceMethods
def nil_empty_fields
self.attributes.each do |key, value|
if not value.nil? and value.kind_of?(String)
self[key] = nil if value.length == 0
end
end
end
end #end instance methods
end
ActiveRecord::Base.send :include, ModelUtils
Hope this helps…
base.send :include, Stone::ModelUtils::InstanceMethods
should be
base.send :include, ModelUtils::InstanceMethods
Could you, just as a test, create this table a a corresponding empty
model and tell me what value Submission.new.postcode returns?
CREATE TABLE submissions
(
id
int(11) NOT NULL auto_increment,
email
varchar(255) NOT NULL,
fname
varchar(255) NOT NULL,
lname
varchar(255) NOT NULL,
street
varchar(255) NOT NULL,
housenr
int(11) NOT NULL,
housenr_ext
varchar(255) default NULL,
postcode
varchar(6) NOT NULL,
city
varchar(255) NOT NULL,
shirt_type
varchar(255) NOT NULL default ‘m’,
shirt_size
varchar(255) NOT NULL default ‘l’,
shirt_text
text NOT NULL,
processed_at
datetime default NULL,
approved_at
datetime default NULL,
created_at
datetime NOT NULL,
updated_at
datetime NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
I will run this test tomorrow morning and let you know.