如何在Rails 5.1中关闭BIGINT主键

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

可以在配置中的某个地方禁用它吗? 如果是这样,如何禁用它?

根据pull请求 ,在配置级别上不可能这样做。 但事实上,你可以将id强制为整数,如下所示:

 create_table :users, id: :integer do 

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

 t.references :orders, type: :integer 

看到这是重复代码太多,我建议你为此编写助手,覆盖默认方法,或者非常激进并分叉数据库适配器,根据需要更改它。 我会选择第二个选项:

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