我有一个Rails应用程序,其中包含一个表的id
代自定义算法。现在我决定使用Postgres生成的默认增量ID作为主键,并将我的自定义值从id
移动到另一列,如uid
。我希望在id
列中为所有记录重新生成值 - 正常情况下从1到n
做这个的最好方式是什么?我有大约1000条记录。其他表中的记录与这些记录相关联。
答案 0 :(得分:0)
您可以通过迭代记录并更新它们(及其相关对象)来完成。处理1000条记录并不多。
让我们假设您有一个名为" my_objects"的表,其模型名为" MyObject"。我们还要说你有另一张桌子,名为" related_objects"及其模型" RelatedObject"
您可以迭代所有MyObjects记录,同时更新其相关对象和记录本身。
records = MyObject.all #Whatever "MyObject" you have.
i = 0
records.each do |record|
#Updating whatever associated objects the record have
record.related_objects.each do |related_object|
related_object.update_column("my_object_id", i)
end
#Updating the record itself
record.update_column("id", i)
i++
end
答案 1 :(得分:0)
您可以保留ID列中的任何值,但创建一个名为UID的新列并将其设置为主键并自动增量
def self.up
execute "ALTER TABLE mytable modify COLUMN uid int(8) AUTO_INCREMENT"
end
您可以告诉您的模型使用UID作为主键
self.primary_key = 'uid'