При выполнении миграции на 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
но не могу найти это.