我在try 向现有表中添加NOT NULL列时出现以下错误.为什么会这样?.我try 了rake db:reset,认为现有记录是问题所在,但即使重置了db,问题仍然存在.你能帮我弄清楚吗.

Migration File

class AddDivisionIdToProfile < ActiveRecord::Migration
  def self.up
    add_column :profiles, :division_id, :integer, :null => false
  end

  def self.down
    remove_column :profiles, :division_id
  end
end

Error Message

SQLite3::SQLException:无法添加默认值为NULL的NOT NULL列:ALTER TABLE"profiles"add"division_id"integer NOT NULL

推荐答案

表中已经有行了,您正在添加一个新的列division_id.它需要在每个现有行的新列中添加一些内容.

SQLite通常会 Select NULL,但您已经指定它不能为NULL,那么它应该是什么呢?它没有办法知道.

见:

该博客的建议是添加不带NOTNULL约束的列,并在每一行中添加null.然后可以在division_id中填写值,然后使用change_column添加not null约束.

请参阅我链接到的博客,了解执行此三步过程的迁移脚本的描述.

Ruby-on-rails相关问答推荐

使用RubyZip处理大型压缩文件:65535个文件的限制

如何控制或定制S为模型使用的命名路由Rail()?

Gemfile需要较新版本的依赖项

Rails 使用多个外键创建/构建

Rails - 如何从模型中查询 has_many

rails 模型 has_many 本身

如何在 rspec 中运行单个测试?

在两个 DateTime 之间迭代,步长为一小时

URL中的Rails点而不是斜杠

升级到 ruby​​ 1.9.2 后奇怪的无法要求配置/ bootstrap

Ruby on Rails:调试 rake 任务

Rails Rake 任务 - 访问模型类

如何测试自定义验证器?

加载常量时自动加载常量时检测到循环依赖

rails 单数资源还是复数?

Rails 控制台中手动更新属性值的验证问题

Sidekiq 在 docker-compose 上的 127.0.0.1:6379 (Errno::ECONNREFUSED) 上连接到 Redis 时出错

在 Rails 协会中未找到名为的协会可能拼写错误的问题

Ruby 更新后:测试失败,assets资源 未声明为在生产中预编译

在 El Capitan 上安装 Nokogiri (1.6.7) 时出错