我的困境是,出于遗留原因,我需要为表中的所有记录重新分配一个新 id,但是该表已经与依赖于它的旧 id 的不同模型有很多关系。我想想出一个重新分配 id 并维持所有关系的好方法,但我自己没有运气。任何建议表示赞赏。
谢谢
我的困境是,出于遗留原因,我需要为表中的所有记录重新分配一个新 id,但是该表已经与依赖于它的旧 id 的不同模型有很多关系。我想想出一个重新分配 id 并维持所有关系的好方法,但我自己没有运气。任何建议表示赞赏。
谢谢
此解决方案假定所有表中的外键列名始终相同。它遍历所有表并将旧 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
关系并更改外键。
如何在此表中添加诸如“extra id”之类的新字段,并且不对您的旧 id 做任何事情以保持其稳定并使用您的额外 id 来做您想做的事情?抱歉,我想不出比这个解决方案更好的了。
** 所以您仍然可以使用您的额外 ID 链接到您的旧 ID。