我目前正在尝试运行此迁移:
class AddDroppedProjectsCountToUser < ActiveRecord::Migration
def self.up
add_column :users, :dropped_projects, :integer, {:default=>0, :required=>true}
end
def self.down
remove_column :users, :dropped_projects
end
end
该列已正确添加,但所有旧记录均未填充 0。它们为零。我也尝试过使用 default=>'0'
,但无济于事。知道为什么会这样吗? ( rails 3.0.3)
编辑添加:当我创建一个新用户时,它工作正常,一切看起来都是正确的。表中该值仍然为零的只是老用户。
最佳答案
如果你说会发生什么:
def self.up
add_column :users, :dropped_projects, :integer, :null => false, :default => 0
end
相反?如果没有 :null=>false
,您仍然允许 dropped_projects
中的 NULL
,因此 PostgreSQL 没有理由将它们设置为 0。此外,我不要认为 :required
是 add_column
的有效选项;由于选项只是一个简单的 Hash
并且 add_column
只查找它知道的选项,因此您的杂散 :required
选项将被默默地忽略。
关于sql - 使用 Rails 和 Postgresql 迁移时不填充默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5197983/