2012-11-07 57 views
2

我有ParentChild模型。父has_many :children,应按正确顺序保存在数据库中。我决定把它保存为一个与字段next_id相关的链表。我知道,那里有acts_as_list宝石,但它节省了position字段。它不是更重的SQL解决方案吗?Ruby中的链接列表

不过,你有什么想法,我该如何设计它?我想保存SRP,所以所有使用列表的操作应该在Child模型中。 Parent应该已经订购children

回答

2

具有相关的奇异父列表中的所有元素的好处是你可以一次取它们与秩序:

SELECT * FROM list_items WHERE parent_id=? ORDER BY position 

你不能用链表结构做到这一点。相反,您必须一次最多读取两个,上一个和下一个条目,并且此过程必须递归重复,以便列表中的所有其他记录。检索1000多个物品的列表将是不切实际的。

+0

那么在这样的列表中“移动”操作呢?它不重吗? – everm1nd

+0

它被实现为'UPDATE list_items SET position = position + 1 WHERE parent_id =? AND位置>?'来创建一个洞,将移动的项目重新编号,这并不像您想象的那样糟糕。链接列表的插入速度更快,但如果您想要检索整个列表,则基本上已被清理。 – tadman

+0

感谢您的咨询! – everm1nd