If I use a migration to update a database, and I add an integer field like this:
t.integer :foo :default => 0, :null => false
What is the default state of existing and new records in the database? I hoping the answer is: - Both will read back foo as 0.
Is default => 0 necessary, if I have :null => false?
Just trying to understand the difference between the two...
:null => false
tells your database not to acceptNULL
values.:default => 0
does two things:NULL
or nothing is specified in a query.Point 2 makes sure that when you save your new object, you actually have a valid value in place.
To answer your question: If you don't want
NULL
values in your database, set:null => false
, otherwise just use the:default
parameter. Mind you, '0' andNULL
are not the same things.Not having
NULL
values might be important for indexing purposes or if you need to provide direct database access to a third party.