我刚刚开始学习rails,如果对此的回答相当明显,那就很抱歉。
我已经在我的应用中为帖子和类别表添加了迁移,现在使用以下行添加对posts表中类别的引用,默认值为not null:
add_reference :posts, :category, index: true, foreign_key: true, null: false
但是我在运行迁移时遇到以下错误:
SQLite3::SQLException: Cannot add a NOT NULL column with default value NULL: ALTER TABLE "posts" ADD "category_id" integer NOT NULL
我试过通过api阅读,但无法弄清楚我做错了什么。
答案 0 :(得分:3)
也许sqlite3不允许这样做, 尝试
add_reference :posts, :category, index: true, foreign_key: true, null: false
change_column :posts, :category_id, :integer, null: false
答案 1 :(得分:0)
该消息基本上表示如果没有为其定义默认值,则无法创建“非空”列。
我认为你应该删除null: false
选项。
要防止在POSTS表中显示NULL值,请添加
validates :category, presence: true
到您的Post
型号。
另请参阅另请查看此帖子https://robots.thoughtbot.com/referential-integrity-with-foreign-keys,以便更好地了解Rails中的外键。
答案 2 :(得分:0)
经过一些进一步阅读后,这似乎是sqlite3的一个错误。显然,在对现有表进行更改时,不能向上面的引用添加非null值(这可以在MYSQL中使用)。但是,从头开始创建表时,可以执行此操作。通过将上面的行添加到我的类别的create_table迁移中来管理以使其工作。