我想在数据库的现有列中添加一个默认值,这是我的尝试:
add_column :users, :gamelv1, :integer, default: 1
我添加了default: 1
并运行rake db:migrate
,但是当我检查gamelv1
列的默认值时,它仍然是nil
。我添加的值1
未保存。
如何为我的列设置默认值?
答案 0 :(得分:2)
default
值仅在首次创建记录时应用。现有记录不受default
更改的影响。您可以在迁移中手动应用此默认值:
add_column :users, :gamelv1, :integer, default: 1
User.reset_column_information
User.where(gamelv1: nil).update_all(gamelv1: 1)
这将找到gamelv1
为零的所有记录(数据库中为null),并将更新这些记录,以使gamelv1
具有默认值1
。这样,您的数据就会与数据库结构同时迁移,这样您的应用就会按预期运行,无论记录何时创建。