2012-01-12 75 views
2

我想在我正在使用的Rails应用程序中实现树状菜单(simple example of tree menu)。我不确定是使用acts_as_tree还是Ancestry。它似乎更容易使用acts_as_tree实现简单的树形菜单,然而,Ancestry更受欢迎并且定期维护。有没有人有这个想法?acts_as_tree vs树状菜单的祖先gem

+0

act_as_tree为什么会更简单?我建议你使用祖先,因为模型上只有一个分贝字段。你可能对这个http://railscasts.com/episodes/262-trees-with-ancestry – mark 2012-01-12 12:58:51

+0

@mark感兴趣,你是对的。然而,我试图按照你提到的railscast,但我有问题[rake db:migrate](http://stackoverflow.com/questions/8828204/ancestry-dbmigrate) – 2012-01-12 13:58:53

+0

可能不得不问另一个问题,但试试bundle exec rake db:migrate – mark 2012-01-12 14:11:57

回答

8

使用祖先。它具有更强大的查询功能,因为它实现了materialized path pattern,而不是acts_as_tree实现adjacency list
还有其他选项,如嵌套集,但物化路径通常是最全面的。

https://communities.bmc.com/communities/docs/DOC-9902

如果您需要在数据库级别的序排序(例如分页树网,您根据在树中显示的深度遍历和缩进/ DEDENT语言预先加载的菜单),你需要要么使用递归查询,要么使用嵌套集合或嵌套间隔等可排序编码。 (也就是说,如果在内存中的排序是不是一种选择,它几乎从来没有为。)

https://github.com/collectiveidea/awesome_nested_set
https://github.com/clyfe/acts_as_nested_interval

每个人都有起伏。选择你适合你的东西。

+0

感谢您的建议,我想我已经解决了祖先问题。现在我只需要弄清楚为什么rake db:migrate失败! – 2012-01-12 18:49:22

+0

我已阅读本主题中的更多详细信息:https://www.chiliproject.org/boards/2/topics/314 – PhuongTT 2014-11-23 08:31:29