2

stackoverflow 新手在这里,虽然我过去曾多次来这里寻找有用的答案。这是我的第一个问题,所以请友好:)

我一直在试图弄清楚如何通过添加(或修改)create_table 命令附带的选项哈希来更改 Rails 中的 ActiveRecord 迁移中的表。更具体地说,我正在尝试将使用整数 ID 的模型转换为在 Rails 4.0 和 postgresql 9.1.9 中使用 UUID 的模型。

例如,我的架构当前如下所示:

create_table :users do |t|
  t.string :name
  t.timestamps
end

我想创建一个迁移以将其更改为此(按照此处的 UUID 指南):

create_table :users, id: false do |t|
  t.primary_key :id, :uuid, :default => 'uuid_generate_v1()'
  t.string :name
  t.timestamps
end

我可以添加/删除/更改列,但我不知道如何将其id: false放入表中。到目前为止,我想出的唯一方法是通过彻底破坏桌子drop_table :users然后重新创建它,这对我来说似乎效率很低。我可以调用一些 ActiveRecord 方法来添加选项哈希吗?尝试谷歌搜索没有成功,但也许我不知道正确的搜索查询是什么?

任何帮助,将不胜感激。提前致谢!

编辑:语法。

4

1 回答 1

5

固定的!发现传入id: false只是意味着没有在数据库中生成 id 列,因此调用remove_column :users, :id会删除该列并添加id: false到架构中。

关键见解来自以下较早的线程:在迁移中添加 Id 列

为了完整起见,完整的迁移文件:

def up
  remove_column :users, :id
  add_column :users, :id, :uuid, default: 'uuid_generate_v1()'
end
def down
  remove_column :users, :id
  add_column :users, :id, :primary_key
end
于 2013-05-25T04:04:57.303 回答