重复ActiveRecord记录并维护所有关系

时间:2012-07-04 07:59:45

标签: ruby-on-rails ruby-on-rails-3 postgresql migration

我的困境是,由于遗留原因,我需要为表中的所有记录重新分配一个新的id,但是这个表已经与依赖于它具有旧id的不同模型有很多关系。我想提出一个很好的方法来重新分配id并保持所有的关系,但我自己没有运气。任何建议都表示赞赏。

由于

2 个答案:

答案 0 :(得分:2)

此解决方案假定外键列名在所有表中始终相同。它会遍历所有表格并使用新表格更改旧ID。

model_id = "model_id" #foreign key name for that model
old_id = ... #model old id
new_id = ... #model new id

models = ActiveRecord::Base.send(:descendants)
for m in models do
  if m.column_names.include(model_id)
    m.where("#{model_id} = ?", old_id).update_all(model_id => new_id)
  end
end

修改

您还可以在模型上使用reflect_on_all_associations,遍历所有has_many关系并更改外键。

答案 1 :(得分:0)

如何在此表中添加“extra id”等新字段,并且不要对旧ID进行任何操作以保持稳定并使用额外的ID来执行您想要的操作?对不起,我想不出比这个解决方案更好的了。

**所以您仍然可以使用额外的ID链接到您的旧ID。