1

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

谢谢

4

2 回答 2

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关系并更改外键。

于 2012-07-04T09:27:36.030 回答
0

如何在此表中添加诸如“extra id”之类的新字段,并且不对您的旧 id 做任何事情以保持其稳定并使用您的额外 id 来做您想做的事情?抱歉,我想不出比这个解决方案更好的了。

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

于 2012-07-04T08:11:46.043 回答