如何使用Angular Sortable和Rails排序列表

时间:2016-07-19 12:33:06

标签: ruby-on-rails angularjs jquery-ui-sortable rubaxa-sortable

我遇到了这个问题。我在Rails中构建了一个API,在Angular中构建了一个客户端。我有一个名为Todo的模型,它有一个名为order的属性。当我创建一个新的Todo时,我会自动为新创建的待办事项分配一个如下的值顺序:

@todo = Todo.create(todo_params)
@todo.order = Todo.count + 1

并显示所有待办事项:

@todos = Todo.where(...).order(:order.desc)

在我的客户端中,我使用Sortable进行UI操作,并且有一个名为onUpdate的方法,它为我提供了数组的新索引。

我遇到的问题是索引与order属性中的值I有很大不同。当调用上述函数时,我得到了项目和另外两个值:newIndexoldIndex,但问题是这并没有给我其他待办事项的索引,那怎么能我在数据库中重组了这个?

我很感激任何帮助,因为我在这里有点茫然。

PS:请注意这只是Rails API,所以没有视图。

修改

想要输出:

让我们想象一下:我在数据库中有三个项目:{name: A, order: 1}, {name: B, order: 2}, {name: C, order: 3}。在前端,使用ng-repeat时,每个项目都有一个$index。让我们说,为了论证,A将$index的值为0,B 1,C 2.此时,当我使用Angular库Sortable时,当我手动对列表进行排序时,我得到了值oldIndexnewIndex对应于我在数组中移动的项目的位置,但它没有显示数组中所有项目的位置,因此我不知道'知道如何使用这些属性来更新数据库中的对象。

1 个答案:

答案 0 :(得分:0)

对于任何可能感兴趣的人:最后我使用了以下解决方案:

每次Sortable更新项目时,它都会以正确的顺序发送包含所有项目的数组。然后我循环遍历数组并使用新订单更新每个项目。不确定这是最有效的方法,但它现在解决了这个问题。