ruby-on-rails - 在 Rails 4 迁移中设置自定义主键时出现问题

标签 ruby-on-rails ruby postgresql primary-key database-migration

我使用 postgresql 9.3、Ruby 2.0、Rails 4.0.0。

在阅读了很多有关在表上设置主键的问题后,我生成并添加了以下迁移:

class CreateShareholders < ActiveRecord::Migration
  def change
    create_table :shareholders, { id: false, primary_key: :uid  } do |t|
      t.integer :uid, limit: 8
      t.string :name
      t.integer :shares

      t.timestamps
    end
  end
end

我还在我的模型中添加了 self.primary_key = "uid"

迁移成功运行,但是当我使用 pgAdmin III 连接到数据库时,我看到 uid 列未设置为主键。我错过了什么?

最佳答案

看看this answer .尝试执行“ALTER TABLE shareholders ADD PRIMARY KEY (uid);”,而不在 create_table block 中指定 primary_key 参数。

我建议这样写你的迁移(这样你就可以正常回滚):

class CreateShareholders < ActiveRecord::Migration
  def up
    create_table :shareholders, id: false do |t|
      t.integer :uid, limit: 8
      t.string :name
      t.integer :shares

      t.timestamps
    end
    execute "ALTER TABLE shareholders ADD PRIMARY KEY (uid);"
  end

  def down
    drop_table :shareholders
  end
end

UPD:有自然方式(found here),但仅限于 int4 类型:

class CreateShareholders < ActiveRecord::Migration
  def change
    create_table :shareholders, id: false do |t|
      t.primary_key :uid
      t.string :name
      t.integer :shares

      t.timestamps
    end    
  end
end

关于ruby-on-rails - 在 Rails 4 迁移中设置自定义主键时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19050978/

相关文章:

ruby-on-rails - 在 8000 万行表上索引 UUID

ruby-on-rails - Rails5 ActionCable Chat with Conversations

ruby - 获取 Ruby 字符串中特定单词后的单词?

ruby-on-rails - 将字段名称作为参数传递给自定义验证方法 Rails 4

javascript - Ember.js 错误 : No model was found for 'id' while saving record using ember-data

ruby - 从 cucumber 步骤中提取场景大纲(或读取标签)

node.js - Sequelize 在创建子实体时看不到外键

sql - 在 SQL、Excel 或 Tableau 中对数据集进行排名?

node.js - 如何使用外键指向没有循环依赖的默认值?

ruby-on-rails - 渲染状态 : 403 causes "Missing template" error