Rails - 创建有效的优先级方法

时间:2015-04-03 20:15:51

标签: ruby-on-rails hash destroy

我有10个任务和一个整数优先级列。每个任务的编号为1到10 - 1是最重要的,10个是最不重要的。让我们说完成任务4(并在完成后将其销毁),如何将任务5到10调整到4到9?

我正在尝试确定最佳方法。我认为代码将遵循这个逻辑:

在销毁之后(让我们说任务4),任务的哈希计算然后更新 - 每个任务根据其在哈希中的索引接收它的新优先级整数。

我将如何开始编写此代码并且首先是我的逻辑声音?

2 个答案:

答案 0 :(得分:1)

在这里要考虑几件事情。

首先,听起来这些任务存储在数据库中。您可能想要考虑将它们存储在数组(在内存中)而不是将它们存储在数据库中的方法。在数组中执行这些排队任务比读取和写入数据库要有效得多。

如果结构是在DB中,您可能希望从DB执行单个读取操作,以将10个任务(使用您的示例)写入数组。在数组中进行数据处理(排序,排队,删除),然后在完成后写回数据库。

这是Ruby中Stacks和Queues的一个很好的入门读物。祝你好运!

https://rubymonk.com/learning/books/4-ruby-primer-ascent/chapters/33-advanced-arrays/lessons/86-stacks-and-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。