簡體   English   中英

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

[英]Rails4 migration- adding null: false to an add_reference method?

我剛剛開始學習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遷移中來管理以使其工作。

注意:使用引用時, 無需指定index: true

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM