奇怪的 Rails 迁移行为 - 重复 add_references 命令并因 ActiveRecord::StatementInvalid: PG::DuplicateColumn 而失败

问题描述

我正在运行 Rails 5.2.4.4,发现当我的用户迁移中列出了两个 add_references 时出现了最奇怪的行为。即使它们是不同表引用的唯一行,输出显示一个重复,然后由于重复列而失败。如果我切换语句,它只会导致另一个 add_reference 重复并失败:

迁移:

def change
  add_column :users,:first_name,:string
  add_column :users,:last_name,:authentication_token,:location,:is_admin,:boolean,default: false
  add_column :users,:account_active,default: true
end

add_reference :users,:tagging,type: :uuid,foreign_key: true,null: true
add_reference :users,:tenant,foreign_key: true

add_index :users,:created_at

导致此错误

-- add_reference(:users,{:type=>:uuid,:foreign_key=>true,:null=>true})
-- add_reference(:users,:null=>true})
rails aborted!
ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR:  column "tagging_id" of relation "users" already exists

如果我切换 add_references 列:

  add_reference :users,foreign_key: true
  add_reference :users,null: true

我反而得到:

-- add_reference(:users,:foreign_key=>true})
-- add_reference(:users,:foreign_key=>true})
rails aborted!
ActiveRecord::StatementInvalid: PG::DuplicateColumn: ERROR:  column "tenant_id" of relation "users" already exists

提前致谢。

解决方法

发现问题...

我已将 add_references 代码放在 def change 块之外。

移动它并全部修复。