有一些宝石可以解决您的问题。Ruby 工具箱将它们放在Active Record Sortables类别中。截至撰写本文时(2017 年 3 月),此列表中的顶级宝石是:
act_as_list (网站, GitHub )
这是在数据库中管理有序列表的最流行的选择,并且在创建 10 年后仍然保持不变。它会做你想做的事并管理项目的数量。gem 会以正确的顺序保持您的位置字段编号从 1 到 n。然而,这意味着在列表中间插入项目意味着增加其下方列表项目的所有位置值,这对您的数据库来说可能是相当多的工作。
排名模型( GitHub )
该 gem 还为您管理自定义排序列表。然而,它在幕后使用了另一种方法,您的列表项在整个整数值范围内获得很大的位置编号并且间隔开。如果您有大量列表并且需要经常重新排序项目,这应该会给您带来性能优势。在我看来,这个 gem 可能不再被维护,因为作者现在正在进行 Ember.js 开发,但它应该可以工作。编辑: 它仍然被维护。
可排序(GitHub)
这似乎与 act_as_list 相同,但能够将您的项目放入多个列表中。我不确定这是否是一个有效的用例,因为您可以只创建多个项目。看起来它没有维护很长时间,也没有被很多人使用。
度假村( GitHub )
这个gem 使用链表方法,即每个数据库条目都有一个指向下一个条目的指针。如果您需要在列表中间进行大量插入,这可能是一个好主意,但对于仅获取整体列表或者如果数据库中出现问题并且链中断,这似乎是一个糟糕的主意。它很新,所以让我们看看它是如何发展的。
act_as_restful_list ( GitHub )
这个宝石是“就像acts_as_list,但很安静”。它似乎旨在提供更好的 API。它背后的公司已经不存在了,所以我宁愿使用act_as_list来处理它的API,反正也不错。