第一DB迁移:未定义的表/关系不对外键
错误信息存在: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。
我仍然不确定为什么Postgres在这里抛出一个错误,而Sqlite没有。然而,为了正确地引用解析器列到用户表的一种方法是使用foreign_key:{to_table:用户}:
add_reference :bugs, :resolver, foreign_key: {to_table: :users}
摆脱原有add_reference
迁移后。 PG在通过这条线路迁移时没有抱怨。
(Rails 5)