How do :default => 0 and :null => false differ for integer fields in migrations? How do :default => 0 and :null => false differ for integer fields in migrations? ruby-on-rails ruby-on-rails

How do :default => 0 and :null => false differ for integer fields in migrations?


:null => false tells your database not to accept NULL values.

:default => 0 does two things:

  1. Tell your database to use '0' as the default value when NULL or nothing is specified in a query.
  2. Tell rails to use '0' as a default value when creating a new object.

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' and NULL 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.