rails 6 外键不能为空

rails 6 foreign key can't be null

我有一个迁移文件如下:

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 错误!

如何允许外键为空值?

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

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

change_column :carts, :user_id, :bigint, null:true