如何在Rails 5.1中关闭BIGINT主键
Rails 5.1迁移为表的主键( changelog )生成BIGINT
(而不是Integer
)。
可以在配置中的某个地方禁用它吗? 如果是这样,如何禁用它?
根据pull请求 ,在配置级别上不可能这样做。 但事实上,你可以将id
强制为整数,如下所示:
create_table :users, id: :integer do
另一方面,您必须意识到更改也会影响references
行为,因此您应该小心这些:
t.references :orders, type: :integer
看到这是重复代码太多,我建议你为此编写助手,覆盖默认方法,或者非常激进并分叉数据库适配器,根据需要更改它。 我会选择第二个选项:
- 为
Migration[5.0]
和ActiveRecord::ConnectionAdapters::TableDefinition
创建匿名模块 - 在第一个中定义
create_table
,add_reference
,add_belongs_to
,在第二个中定义references
和belongs_to
(belongs_to
应该只是references
别名) - 在那些方法中只需修改选项并调用super。 不要忘记处理签名!
- 将这些模块添加到各自的类中将为您处理所有事情。
- 你可以做得更好,也可以为他们的移除同行做这件事。