7

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

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

4

1 回答 1

8

根据拉取请求,这在配置级别是不可能的。但实际上,您可以强制id为整数,如下所示:

create_table :users, id: :integer do

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

t.references :orders, type: :integer

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

  1. Migration[5.0]为和创建匿名模块ActiveRecord::ConnectionAdapters::TableDefinition
  2. 在第一个和第二个中定义create_table, add_reference, (应该只是 的别名)add_belongs_toreferencesbelongs_tobelongs_toreferences
  3. 在这些方法中,只需修改选项并调用 super。不要忘记处理签名!
  4. 将这些模块添加到各自的类中将为您处理一切。
  5. 您可以做得更好,也可以为他们的移除对象执行此操作。
于 2017-06-06T13:38:23.450 回答