1

我应该如何更改以下代码以将:id列用作主键,auto_increment以及:limit => 8

def change
  create_table :companies, :id => false do |t|
    t.integer :id, :limit => 8
    t.string :name

    t.timestamps
  end
end

此代码不会将:id列设为主键,也不会创建自动递增序列。

PostgreSQL 8.4、Rails 3.2.11

4

1 回答 1

1

在迁移中更改列的长度或数据类型将使该列作为主键无效。相反,创建一个覆盖站点默认主键数据类型的初始化程序应该提供您希望实现的行为:

# config/initializers/change_primary_key_datatype.rb
require 'active_record/connection_adapters/postgresql_adapter'
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::NATIVE_DATABASE_TYPES[:primary_key] = "bigserial primary key"

请记住在保存初始化程序后重新启动服务器。

于 2013-03-09T00:10:08.770 回答