如何在现有范围之间重新排序

时间:2019-05-10 06:06:01

标签: ruby-on-rails ruby sorting

给定情况

id name sequence
1   a     1
2   b     2
3   c     3
4   d     4
5   e     5

用户表中有sequence,代表要在前端显示的用户顺序。

在上面的示例中,如果我尝试在user id 3之间插入用户,则预期的行为应该是

id name sequence
1   a     1
2   b     2
3   c     3
4   d     5
5   e     6
6   f     4

此处位置是使用最后一个序列输入计算的 last_sequence = 3.

类似地,用户可以重复相同类型的操作,并且应该根据数据库中的操作对其进行重新排序。 注意:不是JQuery排序。

我的尝试

seq = last_sequence
users.where("last_sequence >= ? and id != ?",3,6).each do |u|
    u.update_attributes(sequence: seq+1 )
    seq = u.sequence + 1
end

我知道以上情况是错误的,全神贯注地寻找解决方案

1 个答案:

答案 0 :(得分:0)

我像下面一样决心

seq = latest_updated_user.sequence
user.where("sequence >= ? and id != ?",last_user.sequence, last_user.id).order(:sequence, :created_at).each do |v|
  v.update_attributes(sequence: seq)
  seq += 1
end