如何在Rails 5.1中关闭BIGINT主键

时间:2017-06-06 12:37:52

标签: ruby-on-rails ruby ruby-on-rails-5.1

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

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

1 个答案:

答案 0 :(得分:6)

根据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_table中定义add_referenceadd_belongs_toreferences,在第二个belongs_to中定义belongs_to references应该只是别名public enum Frequency { Low, Medium, High } public enum Severity { Low, Medium, High } public class TicEntry { public int TicEntryID { get; set; } public int TicTypeID { get; set; } public DateTime DateTime { get; set; } public Frequency? Frequency { get; set; } public Severity? Severity { get; set; } public virtual TicType TicType { get; set; } } public enum Type { Motor, Vocal, ComMotor, ComVocal } public class TicType { public int TicTypeID { get; set; } public Type? Type { get; set; } public virtual ICollection<TicEntry> TicEntry { get; set; } }
  4. 在这些方法中只需修改选项并调用super。不要忘记处理签名!
  5. 将这些模块预先安排到各自的课程中 一切都适合你。
  6. 你可以做得更好,也可以为他们的移除同行做这件事。