我现在正在尝试运行这个迁移:
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,它们是nil。我尝试使用 default=> '0'
,但没有用。有任何想法可能是什么原因?(Rails 3.0.3)
编辑添加:当我创建一个新用户时,它可以正常工作,一切看起来都是正确的。只有旧用户在表中的该值仍为nil。
:required
的小更新。NULL的问题在于有时它意味着“未知”,而有时它意味着“不存在”。数据库无法区分这两种情况;如果你没有明确表示“不允许NULL”,那么DB就无法知道这些NULL是默认值还是显式的NULL。 - mu is too short:null=>false
留空即可,但这可能对现有行没有任何影响,您可以始终使用原始 SQL 执行“UPDATE table ...”并执行一半更新;当 SQL 是完成工作的最直接和有效的方式时,没有理由避免使用它。 - mu is too short