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