Discussion: Inserting NULL into database instead of empty strings

51 views
Skip to first unread message

bricker

unread,
Oct 11, 2012, 3:16:02 AM10/11/12
to rubyonra...@googlegroups.com
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?

Johann Christoph Gorzny

unread,
Oct 11, 2012, 4:47:39 AM10/11/12
to rubyonra...@googlegroups.com
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 via http://www.ruby-forum.com/.

Scott Ribe

unread,
Oct 11, 2012, 11:59:18 AM10/11/12
to rubyonra...@googlegroups.com
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...@elevated-dev.com
http://www.elevated-dev.com/
(303) 722-0567 voice




Reply all
Reply to author
Forward
0 new messages