我遇到了这个问题。我在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有很大不同。当调用上述函数时,我得到了项目和另外两个值:newIndex
和oldIndex
,但问题是这并没有给我其他待办事项的索引,那怎么能我在数据库中重组了这个?
我很感激任何帮助,因为我在这里有点茫然。
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时,当我手动对列表进行排序时,我得到了值oldIndex
和newIndex
对应于我在数组中移动的项目的位置,但它没有显示数组中所有项目的位置,因此我不知道'知道如何使用这些属性来更新数据库中的对象。
答案 0 :(得分:0)
对于任何可能感兴趣的人:最后我使用了以下解决方案:
每次Sortable
更新项目时,它都会以正确的顺序发送包含所有项目的数组。然后我循环遍历数组并使用新订单更新每个项目。不确定这是最有效的方法,但它现在解决了这个问题。