怎么办:默认=> 0 和 :null => false 迁移中的整数字段有何不同?
如果我使用迁移来更新数据库,并添加一个如下所示的整数字段:
t.integer :foo :default => 0, :null => false
数据库中现有记录和新记录的默认状态是什么?我希望答案是: - 两者都会将 foo 读回 0。
默认 => 0 必要,如果我有 :null =>错误的?
只是想了解两者之间的区别...
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...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
<代码>:空=> false 告诉您的数据库不接受
NULL
值。<代码>:默认=> 0 执行两件事:
NULL
或在查询中未指定任何内容时,告诉数据库使用“0”作为默认值。第 2 点确保当您保存新对象时,您实际上拥有一个有效的值。
回答您的问题:如果您不想在数据库中使用
NULL
值,请设置:null => false
,否则只需使用:default
参数。请注意,“0”和NULL
不是同一件事。对于索引目的或如果您需要向第三方提供直接数据库访问,没有
NULL
值可能很重要。: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.