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

时间:2015-08-31 07:17:12

标签: ruby-on-rails ruby ruby-on-rails-4 rails-migrations

我刚刚开始学习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阅读,但无法弄清楚我做错了什么。

3 个答案:

答案 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迁移中来管理以使其工作。