无法再次重命名 ActiveRecord 表。“[表]_pkey”不存在

tob*_*yte 5 postgresql activerecord ruby-on-rails

前段时间,我运行了以下 rails 迁移来更改表的名称:

class RenameMaterialDonationsToMaterialDonationRequests < ActiveRecord::Migration
  def change
    rename_table :material_donations, :material_donation_requests
  end
end
Run Code Online (Sandbox Code Playgroud)

现在我需要再次重命名表。这是我的迁移:

class RenameMaterialDonationRequestsToHelpRequests < ActiveRecord::Migration
  def change
    rename_table :material_donation_requests, :help_requests
  end
end
Run Code Online (Sandbox Code Playgroud)

但是,当我运行迁移时,出现以下错误:

PG::Error: ERROR:  relation "material_donation_requests_pkey" does not exist
: ALTER INDEX "material_donation_requests_pkey" RENAME TO "help_requests_pkey"/Users/[me]/.rvm/gems/ruby-2.1.4/gems/activerecord-4.2.4/lib/active_record/connection_adapters/postgresql/database_statements.rb:155:in `exec'
Run Code Online (Sandbox Code Playgroud)

我正在使用 Postgresql。在 pgAdmin3 中,我可以看到 pkey 仍然保留了第一次迁移之前的表名:

CONSTRAINT material_donations_pkey PRIMARY KEY (id)
Run Code Online (Sandbox Code Playgroud)

如何解决此问题以重命名表?

tob*_*yte 5

下面的答案可能有效,但我决定这样做:

execute "ALTER INDEX material_donations_pkey RENAME TO material_donation_requests_pkey;"
Run Code Online (Sandbox Code Playgroud)

我选择这个是因为它是迁移试图作为原始迁移的一部分自动运行的命令。当我第一次重命名这个表时,该命令并没有自动成为 4.0 之前的 rails 的一部分,所以我现在运行它。我觉得做 Rails 目前正在做的事情更舒服。