问题描述
我正在运行 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 块之外。
移动它并全部修复。