gpt4 book ai didi

ruby-on-rails - 什么确定 rails 是否包含 id : :serial in a table definition?

转载 作者:行者123 更新时间:2023-11-29 11:13:16 24 4
gpt4 key购买 nike

我正在使用现有的 Rails 应用程序,使用 postgresql。它的 schema.rb 文件有很多表的 id: :serial:

create_table "foos", id: :serial, force: :cascade do |t|

当我运行 rails db:migrate:reset 时,id: :serial 被删除。我们都使用相同版本的 postgres,但操作系统不同。我没有详尽地测试机器之间的行为,但我认为机器之间存在差异。

rails版本与项目启动时相同。

该项目确实是从 sqlite3 开始的。当我切换到那个并重新生成文件时,行为相同。

什么会导致这个选项在我的环境中被删除?

这里有一些可能相关的代码:

更新

  • 我刚刚在同事的机器上尝试了 rails db:migrate:reset,但我错了!他们的环境也删除了 id::serial
  • 我仔细查看了一位同事最近的迁移,最近的迁移也没有在 schema.rb 中创建 id: :serial

最佳答案

当您运行 rails db:migrate:reset 而不是 rails db:reset 时,数据库架构不会从 schema.rb 而是从您的所有迁移中重建。在迁移和模式文件中,您不需要指定 id 字段,默认情况下会提供一个。但是,从 Rails 5.1 开始,default size of the id field was increased对于 MySQL,从 INTBIGINT,对于 PostgreSQL,从 SERIALBIGSERIAL。因此,您的迁移、schema.rb 和数据库中的实际模式之间可能存在一些交互,导致 id 字段在某些情况下被视为默认(并省略)并被显式指定在其他情况下,仅仅是由于默认大小的变化。如果不查看所有相关文件,就很难猜测问题的根源。

关于ruby-on-rails - 什么确定 rails 是否包含 id : :serial in a table definition?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54598531/

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