【发布时间】:2015-10-29 22:44:35
【问题描述】:
使用 Postgres 作为后备存储,我有一个表(至少目前是这样),它有一个整数主键和一个带有唯一索引的 uuid。
在我的schema.rb 中看起来像这样(例如简化):
create_table "regions", force: cascade do |t|
t.integer "region_id"
t.uuid "uuid", default: "uuid_generate_v4()"
t.string "name"
end
add_index "regions", ["uuid"], name "index_regions_on_uuid", unique: true, using :btree
然后我有一个引用整数 id 的表,如下所示:
create_table "sites", force:cascade do
t.integer "site_id"
t.integer "region_id"
t.string "name"
end
我要做的是从region_id 切换到uuid 作为第二个表中的外键。我应该怎么写这个迁移?
【问题讨论】:
-
是否要将
sites表的region_id的名称更改为uuid?或者您是否要更改region_id在regions上为关联引用的列? -
@eirikir 是后者,我想将
sites.region_id替换为引用regions.uuid列的uuid 类型列,而不是regions.region_id列。它可以是具有新名称的新列,也可以是相同的列,但可以进行更改,以实现更无缝的迁移和重构。 -
@derekv 我用关联代码更新了我的答案——现在在我看来它非常明确,我认为你没有理由不喜欢它:)
-
@EugZol 我们同时查看了您的答案和 eirikir 的答案并设法在本地工作,但是问题比最初看起来更棘手,因为您遇到了 catch22,其中迁移指的是关系在模型中定义但也改变了这种关系,所以当你的队友拉代码时它不会工作......也许这就是你暗指你编辑的答案,所以我会尽快给它一个镜头。
-
@derekv 你说得对,我专门解决了这个问题。
标签: ruby-on-rails ruby postgresql activerecord database-migration