在Ruby on Rails中按顺序组织表中对象的ID

时间:2018-04-03 06:49:23

标签: ruby-on-rails ruby

我在activerecord模型中有很多数据,即使我删除了一条记录,也希望它的ID能够按顺序排列。

例如,表中的ID为1, 2, 3, 4,当我删除I​​D 2时,它将为1, 3, 4 我希望它自动填充已删除的号码(2),有人知道该怎么做吗?

3 个答案:

答案 0 :(得分:1)

如果您要更新ID,它可能会对其他关联的表产生影响。所以,我建议你在表中添加一个sequence_id(或任何)。然后按id& amp;更新每条记录的sequence_id列。然后你可以从sequence_id获得订单1,2,3,4。

您可以这样做(此处User是用户表的模型):

after_destroy :update_sequence

def update_sequence
  User.order("id").find_each.with_index do |user ,i|
    user.update_attribute :sequence_id, i + 1
  end
end

答案 1 :(得分:1)

我肯定不会使用id来执行此操作,因为更改主键值将会非常有问题。

您可以添加其他列,但是否值得这样做取决于您在此处尝试解决的问题。

你肯定会遇到一些困难的边缘情况,其中一个destroy动作必须暂时阻止任何其他的破坏或插入动作,直到它重新编号以下所有值。

您还应该考虑在删除行" 3"然后你有200万行重新编号。

答案 2 :(得分:0)

我会建议你使用gem act_as_list

这将提供对列表中的多个对象进行排序和重新排序的功能