【问题标题】:Weird Rails migration behaviour - repeating add_references commands and failing with ActiveRecord::StatementInvalid: PG::DuplicateColumn奇怪的 Rails 迁移行为 - 重复 add_references 命令并因 ActiveRecord::StatementInvalid: PG::DuplicateColumn 而失败
【发布时间】:2021-03-13 11:47:14
【问题描述】:

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

迁移:

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

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

add_index :users, :created_at

导致此错误:

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

如果我切换 add_references 列:

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

我反而得到:

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

提前致谢。

【问题讨论】:

    标签: ruby-on-rails-5 rails-migrations


    【解决方案1】:

    发现问题...

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

    移动它并全部修复。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-03-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多