如何在哈希中将插入上方或下方的所有值向上或向下移动一个
Posted
技术标签:
【中文标题】如何在哈希中将插入上方或下方的所有值向上或向下移动一个【英文标题】:How to move all values above or below an insertion up one or down one in a hash 【发布时间】:2019-06-23 02:49:38 【问题描述】:这是用于拖放的,我的前端工作正常,它可以正确地将数据发送到我的 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 或更高将不能碰。
【问题讨论】:
老实说太难阅读你的代码,你能提供动作和数据结构的参数吗?以及它的结果。 我添加了更改,更改了代码以尝试使其更具可读性,并添加了示例数据。 @NeverBe 好多了,但我不确定我是否理解所有内容。你打算实施这样的事情吗? github.com/swanandp/acts_as_list 是的,一般的想法,我只是不需要它提供的所有功能。 我也想真正了解我的逻辑在哪里失败,而不是仅仅使用 gem 或复制粘贴别人的代码 【参考方案1】:结果证明我的逻辑没有问题...只是我在前端分配数据的方式存在问题,这偶尔会混淆索引,这就是为什么我认为前端返回正确数据的原因,经过一番挖掘后,我在前端为任务分配了错误的索引,因此破坏了后端。
【讨论】:
以上是关于如何在哈希中将插入上方或下方的所有值向上或向下移动一个的主要内容,如果未能解决你的问题,请参考以下文章