복붙노트

[RUBY-ON-RAILS] PG : UndefinedTable : 오류 : 관계 "..."존재하지 않는

RUBY-ON-RAILS

PG : UndefinedTable : 오류 : 관계 "..."존재하지 않는

이전에 나는 다음과 같은 오류 메시지가 나타납니다 :

PG::UndefinedTable: ERROR:  relation "actioncodes" does not exist
: ALTER TABLE "organizations" ADD CONSTRAINT "fk_rails_4ecaa2493e"
FOREIGN KEY ("actioncode_id")
  REFERENCES "actioncodes" ("id")

나는 조직에 대해 다음 마이그레이션 파일이 있습니다 :

class CreateOrganizations < ActiveRecord::Migration
  def change
    create_table :organizations do |t|
      t.string     :name,         null: false,    limit: 40
      t.references :actioncode,   index: true,    foreign_key: true
      t.boolean    :activated
      t.datetime   :activated_at

      t.timestamps null: false
    end
  end
end

그리고 Actioncodes 내가 마이그레이션 파일이 있습니다 :

class CreateActioncodes < ActiveRecord::Migration
  def change
    create_table :actioncodes do |t|
      t.string  :code,          null: false,  limit: 20
      t.string  :description,                 limit: 255

      t.timestamps null: false
    end
  end
end
class AddIndexToActioncodesCode < ActiveRecord::Migration
  def change
    add_index :actioncodes, :code,  unique: true
  end
end

조직 모델 파일은 다음과 같습니다 belongs_to : actioncode.

has_many : 조직을 actioncodes 모델 파일을 포함하는 동안.

오류 메시지의 원인이 될 수있다 어떤 생각?

사실, foreign_key : 나는 인덱스 제거하면 마이그레이션 파일에서 사실을,이 오류없이 마이그레이션합니다. actioncode_id, 인덱스 : 사실, foreign_key : 내가 잘못된 라인 t.references와 그 라인을 교체 할 때 그리고 사실, 그것은 마지막 줄 ( "IDS") 어떻게 든 레일 제안의 이름에 문제가있는 것 경우, 아래의 오류를 제공 탁자?

PG::UndefinedTable: ERROR:  relation "actioncode_ids" does not exist
: ALTER TABLE "organizations" ADD CONSTRAINT "fk_rails_604f95d1a1"
FOREIGN KEY ("actioncode_id_id")
  REFERENCES "actioncode_ids" ("id")

해결법

  1. ==============================

    1.CreateOrganizations 마이그레이션이 CreateActioncodes 전에 실행되고 있기 때문에 문제가 일어나고 그래서 실행됩니다.

    CreateOrganizations 마이그레이션이 CreateActioncodes 전에 실행되고 있기 때문에 문제가 일어나고 그래서 실행됩니다.

    CreateActioncodes는 액션 코드 테이블이 존재 함을 보장하는 첫 번째하여 실행하는 것입니다.

    마이그레이션이 실행되는 순서는 마이그레이션의 타임 스탬프를 기반으로 - 파일의 이름을 표시한다. 20141014183645_create_users.rb 두 번째의 타임 스탬프로 20141014205756_add_index_to_users_email.rb 전에 실행됩니다 - 20141014183645-20141014205756은 처음의 그 이후입니다.

    확인 마이그레이션이 CreateActioncodes 마이그레이션 그 이후 인 CreateOrganizations의 타임 스탬프를 확인합니다.

    어느 쪽이든 당신은 수동으로 파일 이름에 타임 스탬프를 변경할 수 있습니다. 또는 이러한 마이그레이션 파일을 삭제하고 올바른 순서로 만들 수 있습니다.

  2. ==============================

    2.이 줄 진정한 다음 foreign_key :

    이 줄 진정한 다음 foreign_key :

    t.references :actioncode,   index: true,    foreign_key: true
    

    데이터베이스 내부에 외부 키를 만들 레일을 알려줍니다. 외부 키 :

    그것 (자신이 속한) 데이터베이스 내부의 논리이다 그래서 것을 보장 당신은 당신의 actioncode 열에 잘못된 값을 넣을 수 없습니다 당신은 다른 곳에서 사용중인 actioncodes 테이블에서 항목을 제거 할 수 없습니다.

    제약 조건을 만들려면, 참조 된 테이블 (actioncodes)는 그것을 참조하기 전에 존재해야합니다. 당신이해야 할 모든이의 타임 스탬프 접두사 CreateActioncodes에 대한 한 후 오도록 CreateOrganizations 마이그레이션 파일의 이름을 바꿀 것입니다 귀하의 마이그레이션처럼 보인다는 actioncodes 전에 조직을 만들기 위해 노력하고 있습니다. 프리픽스는 그래서 더 번째로 CreateActioncodes 소인에 CreateOrganizations 타임 스탬프를 변경 yyyymmddhhmmss 형식 단지 소인이다.

  3. ==============================

    3.나는이 오류가 발생했다. 당신이 RSpec에 메이크업을 실행하는 테스트 데이터베이스를 사용하는 경우 반드시 당신은 갈퀴 DB를 실행하여 테스트 : RSpec을 실행하기 전에 터미널에서 준비합니다.

    나는이 오류가 발생했다. 당신이 RSpec에 메이크업을 실행하는 테스트 데이터베이스를 사용하는 경우 반드시 당신은 갈퀴 DB를 실행하여 테스트 : RSpec을 실행하기 전에 터미널에서 준비합니다.

  4. from https://stackoverflow.com/questions/30290250/pgundefinedtable-error-relation-does-not-exist by cc-by-sa and MIT license