我有10个任务和一个整数优先级列。每个任务的编号为1到10 - 1是最重要的,10个是最不重要的。让我们说完成任务4(并在完成后将其销毁),如何将任务5到10调整到4到9?
我正在尝试确定最佳方法。我认为代码将遵循这个逻辑:
在销毁之后(让我们说任务4),任务的哈希计算然后更新 - 每个任务根据其在哈希中的索引接收它的新优先级整数。我将如何开始编写此代码并且首先是我的逻辑声音?
答案 0 :(得分:1)
在这里要考虑几件事情。
首先,听起来这些任务存储在数据库中。您可能想要考虑将它们存储在数组(在内存中)而不是将它们存储在数据库中的方法。在数组中执行这些排队任务比读取和写入数据库要有效得多。
如果结构是在DB中,您可能希望从DB执行单个读取操作,以将10个任务(使用您的示例)写入数组。在数组中进行数据处理(排序,排队,删除),然后在完成后写回数据库。
这是Ruby中Stacks和Queues的一个很好的入门读物。祝你好运!
答案 1 :(得分:1)
class Task<的ActiveRecord ::基
after_destroy:update_priority
def update_priority
Task.all.each_with_index { |n, i| n.update_attribute(:priority, i+1) }
端
端
说明:在destroy动作上(当我完成任务并摆脱它时),destroy调用update_priority方法。这样做了散列中的任务索引,更新了所有优先级属性,并且当索引从0开始时,我的优先级从1开始,我只是为每个更新的属性添加1。