2017-05-08 97 views
0

錯誤信息存在:PG::UndefinedTable: ERROR: relation "resolvers" does not exist第一DB遷移:未定義的表/關係不對外鍵

下面是被吐出錯誤的遷移:

class AddResolverRefToBugs < ActiveRecord::Migration[5.0] 
    def change 
    add_reference :bugs, :resolver, foreign_key: true 
    end 
end 

現在,我得到的沒有Resolver表,因爲實際表是User表; resolver_id是我的foreign_key列。因此,我只有一個resolver_id字段,用於引用用戶模型的模型之一,並且在開發環境中我的應用程序沒有任何問題。

class Bug < ApplicationRecord 
    # Associations 
    belongs_to :user 
    belongs_to :resolver, class_name: 'User', optional: true 

我是否應該指定一些東西,讓PG知道:resolver(resolver_id列)其實就是Users表?

我的錯誤信息中包含行:: ALTER TABLE "bugs" ADD CONSTRAINT "fk_rails_2d3f1765bb" FOREIGN KEY ("resolver_id") REFERENCES "resolvers" ("id")

所以它看起來像它的引用錯誤的事情。

在一個相關StackOverflow question,我注意到他/她有 「嵌套」 引用...

create_table :english_grades do |t| 
    t.references :teacher, references: :users 
    t.references :student, references: :users 

...其中指定用戶。我不確定這是否與此有關。

想必我的模式我的移民可能看起來像:

t.references :resolver, references: users

docs for add_references不提這事。

該人員還具有在遷移中指定的外鍵,其中我確實看到從外鍵字段到實際表格的鏈接。大概我需要這樣的:

add_foreign_key :bugs, :users, column: :resolver_id

但基於我在線閱讀,這是沒有必要使用add_foreign_key

我會很感激這裏的任何解釋。

注意:有些人建議首先運行db:reset,但這對我不起作用,因爲我得到error this person is getting

回答

0

我仍然不確定爲什麼Postgres在這裏拋出一個錯誤,而Sqlite沒有。然而,爲了正確地引用解析器列到用戶表的一種方法是使用foreign_key:{to_table:用戶}

add_reference :bugs, :resolver, foreign_key: {to_table: :users} 

擺脫原有add_reference遷移後。 PG在通過這條線路遷移時沒有抱怨。

(Rails 5)