Ruby:迁移中的 add_reference 会引发错误:表没有

问题描述 投票:0回答:1

我有这个迁移:

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)

这确实会抛出错误..所以是的,没有外键,这就是我尝试添加它的原因..是的,我不确定为什么要这样做..有什么想法吗?

ruby-on-rails ruby activerecord
1个回答
0
投票

基于 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
© www.soinside.com 2019 - 2024. All rights reserved.