如何在 Rails 5.1 中关闭 BIGINT 主键

How to turn off BIGINT primary keys in Rails 5.1

Rails 5.1 迁移为表的主键 (changelog) 生成 BIGINT(而不是 Integer)。

是否可以在配置中的某处禁用它?如果可以,如何禁用它?

根据 pull request,不,这在配置级别是不可能的。 但事实上,您可以强制 id 为整数,如下所示:

create_table :users, id: :integer do

另一方面,您必须意识到更改也会影响 references 行为,因此您应该小心那些:

t.references :orders, type: :integer

鉴于这是太多重复的代码,我建议您为此编写帮助程序,覆盖默认方法,或者非常激进地分叉您的数据库适配器,根据需要在其中进行更改。我会选择第二个选项:

  1. Migration[5.0]ActiveRecord::ConnectionAdapters::TableDefinition
  2. 创建匿名模块
  3. 在第一个中定义create_tableadd_referenceadd_belongs_to,在第二个中定义referencesbelongs_tobelongs_to应该是只是 references)
  4. 的别名
  5. 在这些方法中只需修改选项并调用 super。不要忘记处理签名!
  6. 将这些模块添加到它们各自的 类 将处理 一切为了你。
  7. 您可以做得更好,也可以为他们的移除同行执行此操作。