这是拖放操作,我的前端可以正常工作,并且可以将数据正确发送到我的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或更高不被感动。
答案 0 :(得分:0)
事实证明,我的逻辑没问题……这只是我在前端分配数据的方式中的一个问题,该情况有时会混淆索引,这就是为什么我认为前端会返回正确的数据,经过一番挖掘后,我在前端分配了错误的索引,从而破坏了后端。