如何在 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
鉴于这是太多重复的代码,我建议您为此编写帮助程序,覆盖默认方法,或者非常激进地分叉您的数据库适配器,根据需要在其中进行更改。我会选择第二个选项:
- 为
Migration[5.0]
和 ActiveRecord::ConnectionAdapters::TableDefinition
创建匿名模块
- 在第一个中定义
create_table
、add_reference
、add_belongs_to
,在第二个中定义references
和belongs_to
(belongs_to
应该是只是 references
) 的别名
- 在这些方法中只需修改选项并调用 super。不要忘记处理签名!
- 将这些模块添加到它们各自的 类 将处理
一切为了你。
- 您可以做得更好,也可以为他们的移除同行执行此操作。
Rails 5.1 迁移为表的主键 (changelog) 生成 BIGINT
(而不是 Integer
)。
是否可以在配置中的某处禁用它?如果可以,如何禁用它?
根据 pull request,不,这在配置级别是不可能的。
但事实上,您可以强制 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。不要忘记处理签名!
- 将这些模块添加到它们各自的 类 将处理 一切为了你。
- 您可以做得更好,也可以为他们的移除同行执行此操作。