Ruby on rails 默认值不会保存到数据库中

Ruby on rails 默认值不会保存到数据库中,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我想向数据库中的现有列添加默认值,这是我的尝试: add_column :users, :gamelv1, :integer, default: 1 我添加了default:1并运行rake db:migrate,但是当我检查gamelv1列的默认值时,它仍然是nil。添加的值1I未保存 如何设置列的默认值?只有在首次创建记录时才应用默认值。现有记录不受默认值更改的影响。通过执行以下操作,可以在迁移中手动应用此默认值: add_column :users, :gamelv1, :integer

我想向数据库中的现有列添加默认值,这是我的尝试:

add_column :users, :gamelv1, :integer, default: 1
我添加了
default:1
并运行
rake db:migrate
,但是当我检查
gamelv1
列的默认值时,它仍然是
nil
。添加的值
1
I未保存


如何设置列的默认值?

只有在首次创建记录时才应用
默认值。现有记录不受
默认值更改的影响。通过执行以下操作,可以在迁移中手动应用此默认值:

add_column :users, :gamelv1, :integer, default: 1

User.reset_column_information

User.where(gamelv1: nil).update_all(gamelv1: 1)

这将找到
gamelv1
为零(数据库中为空)的所有记录,并将更新这些记录,以便
gamelv1
具有默认值
1
。这样,您的数据将与数据库结构同时迁移,因此无论记录是何时创建的,您的应用程序都将按预期运行。

如果列已经存在,
add\u column
甚至不会成功。迁移是否正常运行?可能也有帮助。您应该先删除列,然后执行此操作。如果您删除并创建数据库,然后运行迁移,这将起作用,但是您会丢失数据。也可以尝试创建新对象。如果是一个,那就好了。现有对象需要手动更新。运行User.all.each do | u | u.update_属性(gamelv1:1)