При выполнении миграции на Heroku, я получаю PG:: Ошибка: ОШИБКА: отношение "member1_id" не существует

Локально, мои миграции в порядке (хотя я использую SQLite. Переключится на postgresql при разработке как можно скорее).

После сброса базы данных на Heroku с

heroku pg:reset DATABASE

Я побежал

heroku run rake db:migrate

Но я получаю следующую ошибку после миграции:

==  AddForeignKeysToCollaborations: migrating =================================
-- change_table(:collaborations)
rake aborted!
An error has occurred, this and all later migrations canceled:

PG::Error: ERROR:  relation "member1_id" does not exist
: ALTER TABLE "collaborations" ADD CONSTRAINT "collaborations_member1_id_id_fk" FOREIGN KEY ("member1_id_id") REFERENCES "member1_id"(id) ON DELETE CASCADE

Вот эта миграция:

class AddForeignKeysToCollaborations < ActiveRecord::Migration
  def change
    change_table :collaborations do |t|
        t.foreign_key :member1_id, dependent: :delete
        t.foreign_key :member2_id, dependent: :delete
        end
  end
end

Предыдущие миграции для коллабораций

class CreateCollaborations < ActiveRecord::Migration
  def change
    create_table :collaborations do |t|
      t.integer :user_id
      t.integer :collaborator_id

      t.timestamps
    end
    add_index :collaborations, :collaborator_id
    add_index :collaborations, [:user_id, :collaborator_id], unique: true
  end
end

а также

class UpdateCollaborations < ActiveRecord::Migration
  def change
    change_table :collaborations do |t|
      t.rename :user_id, :member1_id
      t.rename :collaborator_id, :member2_id
      t.string :status
    end
    add_index :collaborations,:member1_id
    add_index :collaborations,:member2_id
  end
end

Которые запускаются в таком порядке. Почему эта ошибка появляется на Heroku? В частности, похоже, что PG добавляет ненужный "_id" к "member1_id"

1 ответ

Решение

Вы вызываете методы иностранца с неправильными аргументами. Первый аргумент - это имя таблицы, на которую ссылаются, а не имя столбца, на который ссылаются. И так как имена ваших столбцов не совпадают с именами таблиц, которые вам понадобятся :column варианты также. Что-то вроде этого:

t.foreign_key :users, :column => :member1_id, :dependent => :delete

Это предполагает, что :users это имя таблицы, что ваш :member1_id а также :member2_id столбцы должны указывать на.

Сообщение об ошибке:

отношение "member1_id" не существует

говорит вам, что PostgreSQL ищет таблицу с именем member1_id но не могу найти это.

Другие вопросы по тегам