我有这个迁移:
class AddNotificationSettingToHistoricals < ActiveRecord::Migration[6.1]
def change
unless foreign_key_exists?(:sms_historicals, column: :notification_setting_id)
add_reference :sms_historicals, :notification_setting, foreign_key: true
end
unless foreign_key_exists?(:email_historicals, column: :notification_setting_id)
add_reference :email_historicals, :notification_setting, foreign_key: true
end
end
end
但是当我运行它时,它会抛出此错误:
Table 'email_historicals' has no foreign key for notification_settings
我不明白的是我在迁移中有这些:
unless foreign_key_exists?(:email_historicals, column: :notification_setting_id)
这确实会抛出错误..所以是的,没有外键,这就是我尝试添加它的原因..是的,我不确定为什么要这样做..有什么想法吗?
基于 https://gitlab.com/gitlab-org/gitlab/-/issues/394760 如果在 postgres_foreign_keys 具有正确的列之前在迁移中运行,看起来
foreign_key_exists?
可能会引发错误。他们建议的解决方法是使用 column_exists?
代替
class AddNotificationSettingToHistoricals < ActiveRecord::Migration[6.1]
def change
unless column_exists?(:sms_historicals, :notification_setting_id)
add_reference :sms_historicals, :notification_setting, foreign_key: true
end
unless column_exists?(:email_historicals, :notification_setting_id)
add_reference :email_historicals, :notification_setting, foreign_key: true
end
end
end