0

ローカルでは、移行は問題ありません(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が「member1_id」に不要な「_id」を追加しているようです。

4

1 に答える 1

1

間違った引数で外国人のメソッドを呼び出しています。最初の引数は、参照列名ではなく、参照テーブル名です。また、列名がテーブル名とうまく一致しないため、:columnオプションも必要になります。このようなもの:

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

これは、と列が指す必要が:usersあるテーブル名であることを前提としています。:member1_id:member2_id

エラーメッセージ:

リレーション「member1_id」は存在しません

PostgreSQLがというテーブルを探していますmember1_idが見つかりません。

于 2013-03-21T20:31:21.440 に答える