我正在努力进行以下迁移:
class CreatePartnerActivationHistories < ActiveRecord::Migration[6.1]
def change
create_table :partner_activation_histories do |t|
t.references :partner, null: false, foreign_key: true
t.references :owner, null: false, foreign_key: { to_table: 'admin_users' }
end
end
型号:
class PartnerActivationHistory < ApplicationRecord
belongs_to :partner
belongs_to :owner, class_name: "AdminUser", optional: true
end
当我尝试在没有所有者的情况下创建PartnerActivationHistory
记录时,它会引发以下错误:
PG::NotNullViolation: ERROR: null value in column "owner_id" of relation "partner_activation_histories" violates not-null constraint
我不明白为什么我的optional: true
不工作。。。
有什么想法吗?谢谢
可选所有者意味着数据库中nil
/NULL
的owner_id
,但该列的规范规定它是强制性的,不能是null
。
从这样的列中删除非null要求,你应该很好:
class CreatePartnerActivationHistories < ActiveRecord::Migration[6.1]
def change
create_table :partner_activation_histories do |t|
t.references :partner, null: false, foreign_key: true
t.references :owner, foreign_key: { to_table: 'admin_users' }
end
end
您需要回滚当前的迁移,对迁移文件进行更改,然后再次向前迁移。假设您可以丢失所有当前的PartnerActivationHistory
记录。如果没有,您将需要进行新的迁移,只需通过删除非null约束来修改这一列。