Heroku上的第一个数据库迁移:外键不存在未定义的表/关系

时间:2017-05-08 00:20:33

标签: ruby-on-rails postgresql activerecord

错误讯息:PG::UndefinedTable: ERROR: relation "resolvers" does not exist

这是正在吐出错误的迁移:

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_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

1 个答案:

答案 0 :(得分:1)

我仍然不确定为什么Postgres在这里抛出错误,而Sqlite没有。但是,将解析程序列正确引用到Users表的一种方法是使用 foreign_key:{to_table :: users}

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

删除原始add_reference迁移后。在使用这条线进行迁移时,PG没有抱怨。

(Rails 5)