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

五迷三道 提交于 2019-11-27 11:53:11

问题


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...


回答1:


: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.



来源:https://stackoverflow.com/questions/4012871/how-do-default-0-and-null-false-differ-for-integer-fields-in-migrations

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!