gpt4 book ai didi

mysql - 迁移以创建表引发 Mysql2::Error: 表不存在

转载 作者:IT老高 更新时间:2023-10-28 23:56:18 27 4
gpt4 key购买 nike

我用以下内容编写了一个迁移:

class CreateTableSomeTable < ActiveRecord::Migration[5.1]
def change
create_table :some_tables do |t|
t.references :user, foreign_key: true
t.references :author, references: :user, foreign_key: true
t.text :summary
end
end
end

这是一个创建数据库表的基本迁移。但是:当我运行 rails db:migrate 时,一条非常奇怪的错误消息中止了迁移:

Mysql2::Error: Table 'my_database.some_tables' doesn't exist: SHOW FULL FIELDS FROM 'some_tables'

就好像错误说它不能创建表,因为表确实存在,这是没有意义的。

我看过并尝试过的东西:

  • 检查了 database.yml,看起来不错。一切都没有改变,我最近运行其他迁移也很好(尽管没有创建数据库表的迁移)
  • 运行 bundle 以确保所有 gem 都已安装
  • 删除了 schema.rb 文件,用另一个副本的数据重新创建了数据库,然后我运行了 rake db:schema:dump 来重新创建 架构。 rb 文件。我尝试再次运行迁移,但仍然出现相同的错误。

我正在使用 rails 5.1.1 以及 mysql2 0.4.6

关于如何让迁移运行的任何提示?

最佳答案

我在尝试创建一个新模型时遇到了类似的错误,该模型引用了在迁移到 Rails 5.1 之前创建的现有模型。

虽然错误信息不是很清楚,但在我的例子中,问题是旧模型的主键和新模型的外键之间的数据类型不匹配(MySQL不允许这样) .之所以如此,是因为从 Rails 5.1 开始,所有主键和外键的默认数据类型都是 bigint,但对于旧模型,主键类型仍然是整数。

我通过将当前模型的所有主键和外键转换为 bigint 解决了这个问题,这样我就可以使用 Rails 的新默认值而不必理会它。

解决方法还可以为新外键指定整数类型,以便它们与旧模型的主键类型相匹配。类似于以下内容:

class CreateUserImages < ActiveRecord::Migration[5.1]
def change
create_table :user_images do |t|
t.references :user, type: :integer, foreign_key: true
t.string :url
end
end
end

关于mysql - 迁移以创建表引发 Mysql2::Error: 表不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44550062/

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