Это для перетаскивания, у меня интерфейс работает правильно, и он правильно отправляет данные в мой рельс.
Я пытаюсь отсортировать хеш на основе позиции индекса, которая поступает кака также сортировать только задачи, являющиеся частью выбранного столбца @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}
В этих данных, если я перемещу хеш с идентификатором 4 в 1, индекс 4s должен теперь быть 0, 1 должен быть 1, 2 должен быть 2, и 3 должен быть 3, если 1 перемещается в 4, его индекс должентеперь должно быть 3, 4 должно быть 2, 3 должно быть 1, а 2 должно быть 0.
, если 4 перемещается в 2, цикл не должен даже выполняться для задачи 1 или чего-то меньшего, чем он, так как он долженне быть затронутым, то же самоебудет применяться, если 1 был перемещен в 3, в этом случае 4 или выше не будет затронут.