Forum: Ruby on Rails Discussion: Inserting NULL into database instead of empty strings

Posted by bricker (Guest)
on 2012-10-11 09:16
(Received via mailing list)
When a form is submitted and handled by Rails, it doesn't strip out 
empty
parameters, instead just inserting those values as-is (blank strings). 
I'm
not claiming this to be a problem or a bug, I just want to know if there 
is
a built-in way to normalize these values to ensure clean data. I've been
adding simple callbacks to turn those blank strings into NULL's. 
Something
like this:

    before_save :nilify_blanks
    def nilify_blanks
    self.attributes.keys.each { |a| self[a] = nil if self[a] == "" }
  end

But it gets a little tedious to add this to every model, or mixing it 
in,
or whatever. It doesn't *really* matter to me if everything is blank, or 
if
everything is NULL, I just want the consistency to avoid queries like:

  Event.where("title is not null and title != ''")

We have a lot of tasks running behind the scenes that are creating 
objects,
and I don't want to have to do something like this every time:

  Event.create(start_date: Time.now, title: "", description: "", 
location:
"")

I'm of the mindset that the database should be as hands-off as possible
when it comes to data integrity (for example, allowing NULL in a column
even if it is a required field in the application), instead leaving that 
up
the the application via validations. It feels cleaner to me to only have
one source of validation, and if we decide that a field shouldn't be
required, I don't think that deserves a schema alteration on the 
database.

So: does Rails have anything built-in to ensure this kind of data
consistency?
Posted by Johann Christoph Gorzny (johchri)
on 2012-10-11 10:47
hello,
if you want a default "null" in a column you can define it in the 
migrations.

for example:

t.text :columnname, null: true

hope i understand your problem.
Posted by Scott Ribe (Guest)
on 2012-10-11 18:00
(Received via mailing list)
On Oct 11, 2012, at 1:16 AM, bricker wrote:

> When a form is submitted and handled by Rails, it doesn't strip out empty 
parameters, instead just inserting those values as-is (blank strings). I'm not 
claiming this to be a problem or a bug, I just want to know if there is a built-in 
way to normalize these values to ensure clean data.

Check out the "attribute_normalizer" gem.


--
Scott Ribe
scott_ribe@elevated-dev.com
http://www.elevated-dev.com/
(303) 722-0567 voice
Please log in before posting. Registration is free and takes only a minute.
Existing account (Switch to SSL-encrypted connection)
NEW: Do you have a Google/GoogleMail or Yahoo account? No registration required!
Log in with Google account | Log in with Yahoo account
No account? Register here.