重新生成现有记录的ID

时间:2015-10-13 15:24:19

标签: ruby-on-rails ruby ruby-on-rails-4 activerecord

我有一个Rails应用程序,其中包含一个表的id代自定义算法。现在我决定使用Postgres生成的默认增量ID作为主键,并将我的自定义值从id移动到另一列,如uid。我希望在id列中为所有记录重新生成值 - 正常情况下从1到n 做这个的最好方式是什么?我有大约1000条记录。其他表中的记录与这些记录相关联。

2 个答案:

答案 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'