1

我有一个迁移文件如下:

def change
    create_table :carts do |t|
      t.string :order_number
      t.decimal :total_price
      t.bigint :user_id, null: true
      t.string :status

      t.timestamps
    end
  end

我想允许user_id为空,但我的架构文件将此迁移转换为:

t.bigint "user_id", null: false

所以在我的 cart.rb 模型中,即使我有

belongs_to :user, optional: true

它不起作用,当我尝试保存购物车对象时,我得到 ForeignKey can't be null 错误!

如何允许外键为空值?

4

1 回答 1

1

迁移不是当前数据库结构的声明,它们是组合时的更改 - 产生它。对于组合结构导轨有db/schema.rb(或schema.sql更复杂的场景)

如果该列是,null: false那么它必须已通过稍后的迁移(或直接在 db 中,如果是这样的话 - db 结构可能在开发和生产之间不同步)进行了更改。如果您希望它再次成为null: true- 添加另一个将改变它的迁移。但首先我会弄清楚为什么它最终处于当前状态,可能是有原因的。

change_column :carts, :user_id, :bigint, null:true
于 2019-05-28T18:39:32.790 回答