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
我有一个迁移文件如下:
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