Rails4迁移-向add_reference方法添加null:false吗?

L45*_*457 5 ruby ruby-on-rails rails-migrations ruby-on-rails-4

我刚刚开始学习rails,如果对此的答案很明显,那么我感到抱歉。

我在我的应用程序中添加了帖子和类别表的迁移,现在使用以下行在默认值不为null的情况下添加对帖子表中类别的引用:

add_reference :posts, :category, index: true, foreign_key: true, null: false
Run Code Online (Sandbox Code Playgroud)

但是在运行迁移时出现以下错误:

SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "posts" ADD "category_id" integer NOT NULL
Run Code Online (Sandbox Code Playgroud)

我曾尝试阅读过api,但无法弄清楚我在做什么错。

小智 6

也许sqlite3不允许这样做,尝试

add_reference :posts, :category, index: true, foreign_key: true, null: false
change_column :posts, :category_id, :integer, null: false
Run Code Online (Sandbox Code Playgroud)


L45*_*457 1

经过进一步阅读后,这似乎是 sqlite3 的一个错误。显然,在更改现有表时,您不能像上面那样向引用添加非空值(这在 MYSQL 中可行)。但是,您可以在从头开始创建表时执行此操作。通过将上述行添加到我的类别 create_table 迁移中,设法使其正常工作。