Rails4迁移 - 向add_reference方法添加null:false?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Rails4迁移 - 向add_reference方法添加null:false?相关的知识,希望对你有一定的参考价值。
我刚刚开始学习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阅读,但无法弄清楚我做错了什么。
也许sqlite3不允许这样做,试试
add_reference :posts, :category, index: true, foreign_key: true, null: false
change_column :posts, :category_id, :integer, null: false
该消息基本上表示如果没有为其定义默认值,则无法创建“非空”列。
我认为你应该删除null: false
选项。
要防止在POSTS表中显示NULL值,请添加
validates :category, presence: true
到你的Post
模型。
另请参阅此文章https://robots.thoughtbot.com/referential-integrity-with-foreign-keys以更好地理解Rails中的外键。
经过一些进一步阅读后,这似乎是sqlite3的一个错误。显然,在对现有表进行更改时,不能向上面的引用添加非null值(这可以在mysql中使用)。但是,从头开始创建表时,可以执行此操作。通过将上面的行添加到我的类别的create_table迁移中来管理以使其工作。
注意:使用引用时,there is no need to specify index: true
。
以上是关于Rails4迁移 - 向add_reference方法添加null:false?的主要内容,如果未能解决你的问题,请参考以下文章
AWS Beanstalk - 在 Rails 4.2.1 迁移后,Passenger Standalone 不提供网页服务