如何在散列中将所有值向上或向下移动一个插入值

How to move all values above or below an insertion up one or down one in a hash

这是为了拖放,我的前端工作正常,它向我的 rails 后端正确发送数据。

我正在尝试根据传入的索引位置对哈希进行排序,并且仅对属于所选列的任务进行排序 @tasks = Task.where(column_id: params[:column_id]),如果索引在列表中向上移动,则仅更新较大的值,如果索引在列表中向下移动,则只需要更新较小的值。

我尝试了这个循环的许多不同变体,这导致了最接近的结果,但不太正确。

  @tasks = Task.where(column_id: params[:column_id])

  @task = Task.find(params[:id])

  if(@task.index < params[:index]) 
   @tasks.each do |task|
     next if task.id == params[:id] 
      if task.index <= params[:index] && task.index > @task.index 
        task.update_attribute(:index, t[:index].to_i - 1)
      end
    end
  else
  @tasks.each do |task|
    next if task.id == params[:id] 
      if task.index >= params[:index] && task.index < @task.index
        task.update_attribute(:index, task.index + 1)
      end
    end
  end

  @task.update_attribute(:index, params[:index].to_i)

我的数据是这样的

{ "id" => 1, "column_id" => 1, "content" => "this is a task" , "index" => 0}
{ "id" => 2, "column_id" => 1, "content" => "this is second task" , "index" => 1}
{ "id" => 3, "column_id" => 1, "content" => "this is third task" , "index" => 2}
{ "id" => 4, "column_id" => 1, "content" => "this is fourth task" , "index" => 3}

在此数据中,如果我将 id 为 4 的哈希移动到 1,则 4s 索引现在应为 0,1s 应为 1,2 应为 2,3s 应为 3,如果 1 移动到 4 其索引现在应该是 3,4 应该是 2,3 应该是 1,2s 应该是 0。

如果 4 移动到 2,循环甚至不应该 运行 用于任务 1,或者任何比它小的东西,因为它不应该受到影响,如果 1 移动到 3,同样适用,在4 或更高的情况不会被触及。

事实证明我的逻辑没有问题...只是我在前端分配数据的方式有问题,它偶尔会混淆索引,这就是为什么我相信前端会返回正确的数据,经过一些挖掘后,我在前端为任务分配了错误的索引,因此破坏了后端。