gpt4 book ai didi

ruby-on-rails - PG::UndefinedTable: 错误:关系 "musicians"不存在

转载 作者:数据小太阳 更新时间:2023-10-29 08:36:27 27 4
gpt4 key购买 nike

rake db:migratesqlite3 中本地工作,但在 heroku 中的 postgresql 中不起作用。

错误

PG::UndefinedTable: ERROR:  relation "musicians" does not exist
: ALTER TABLE "orders" ADD CONSTRAINT "fk_rails_ad134589be"
FOREIGN KEY ("musician_id")
REFERENCES "musicians" ("id")
(0.9ms) ROLLBACK
rake aborted!
StandardError: An error has occurred, this and all later migrations canceled:
PG::UndefinedTable: ERROR: relation "musicians" does not exist
: ALTER TABLE "orders" ADD CONSTRAINT "fk_rails_ad134589be"
FOREIGN KEY ("musician_id")

这里是整个日志的链接:https://gist.github.com/helloravi/2cb69e0927e63e186b09

以下是未执行的迁移。错误显示在迁移代码下方

class CreateAlbums < ActiveRecord::Migration
def change
create_table :albums do |t|
t.string :album_name
t.references :musician, index: true, foreign_key: true
t.timestamps null: false
end
add_foreign_key :albums, :users, column: :musician_id
end
end

我有一个用户表,其中有一个 bool 值的音乐家列(一些用户是音乐家)

我什至尝试使用 add_foreign_key 但我仍然无法弄清楚问题是什么。

我尝试了 rake db:schema:load 并且成功了。我希望能够使 rake db:migrate 工作,因为我需要能够在生产中迁移。

最佳答案

SQLite 不检查外键,它只是忽略它们。但是 PostgreSQL 非常严格,当外键约束无效时会引发错误。

rails foreign_key不支持你想要它做什么。当您编写 t.references :musician 时,必须有一个 musicians 表。但是您希望外键指向 users 表。

我看到两个选项:

  1. 使用 t.references :users 并在您的 albums.rb 中重命名该关联,如下所示:

    belongs_to :musician, class_name: 'User', foreign_key: 'user_id'
  2. 或者:您只需使用 t.integer :musician_id 而不是 references 并使用 execute 'ALTER TABLE 手动定义外键约束。 ..'

关于ruby-on-rails - PG::UndefinedTable: 错误:关系 "musicians"不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35359029/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com