[RUBY-ON-RAILS] PG : UndefinedTable : 오류 : 관계 "..."존재하지 않는
RUBY-ON-RAILSPG : 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.CreateOrganizations 마이그레이션이 CreateActioncodes 전에 실행되고 있기 때문에 문제가 일어나고 그래서 실행됩니다.
CreateOrganizations 마이그레이션이 CreateActioncodes 전에 실행되고 있기 때문에 문제가 일어나고 그래서 실행됩니다.
CreateActioncodes는 액션 코드 테이블이 존재 함을 보장하는 첫 번째하여 실행하는 것입니다.
마이그레이션이 실행되는 순서는 마이그레이션의 타임 스탬프를 기반으로 - 파일의 이름을 표시한다. 20141014183645_create_users.rb 두 번째의 타임 스탬프로 20141014205756_add_index_to_users_email.rb 전에 실행됩니다 - 20141014183645-20141014205756은 처음의 그 이후입니다.
확인 마이그레이션이 CreateActioncodes 마이그레이션 그 이후 인 CreateOrganizations의 타임 스탬프를 확인합니다.
어느 쪽이든 당신은 수동으로 파일 이름에 타임 스탬프를 변경할 수 있습니다. 또는 이러한 마이그레이션 파일을 삭제하고 올바른 순서로 만들 수 있습니다.
-
==============================
2.이 줄 진정한 다음 foreign_key :
이 줄 진정한 다음 foreign_key :
t.references :actioncode, index: true, foreign_key: true
데이터베이스 내부에 외부 키를 만들 레일을 알려줍니다. 외부 키 :
그것 (자신이 속한) 데이터베이스 내부의 논리이다 그래서 것을 보장 당신은 당신의 actioncode 열에 잘못된 값을 넣을 수 없습니다 당신은 다른 곳에서 사용중인 actioncodes 테이블에서 항목을 제거 할 수 없습니다.
제약 조건을 만들려면, 참조 된 테이블 (actioncodes)는 그것을 참조하기 전에 존재해야합니다. 당신이해야 할 모든이의 타임 스탬프 접두사 CreateActioncodes에 대한 한 후 오도록 CreateOrganizations 마이그레이션 파일의 이름을 바꿀 것입니다 귀하의 마이그레이션처럼 보인다는 actioncodes 전에 조직을 만들기 위해 노력하고 있습니다. 프리픽스는 그래서 더 번째로 CreateActioncodes 소인에 CreateOrganizations 타임 스탬프를 변경 yyyymmddhhmmss 형식 단지 소인이다.
-
==============================
3.나는이 오류가 발생했다. 당신이 RSpec에 메이크업을 실행하는 테스트 데이터베이스를 사용하는 경우 반드시 당신은 갈퀴 DB를 실행하여 테스트 : RSpec을 실행하기 전에 터미널에서 준비합니다.
나는이 오류가 발생했다. 당신이 RSpec에 메이크업을 실행하는 테스트 데이터베이스를 사용하는 경우 반드시 당신은 갈퀴 DB를 실행하여 테스트 : RSpec을 실행하기 전에 터미널에서 준비합니다.
from https://stackoverflow.com/questions/30290250/pgundefinedtable-error-relation-does-not-exist by cc-by-sa and MIT license