我在activerecord模型中有很多数据,即使我删除了一条记录,也希望它的ID能够按顺序排列。
例如,表中的ID为1, 2, 3, 4
,当我删除ID 2
时,它将为1, 3, 4
我希望它自动填充已删除的号码(2)
,有人知道该怎么做吗?
答案 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
这将提供对列表中的多个对象进行排序和重新排序的功能