如何使用树层次结构(类别)处理rails habtm?

时间:2011-04-27 14:54:08

标签: ruby-on-rails ruby-on-rails-3 tree has-and-belongs-to-many

我已经查看了现有的问题,由于各种变化,我无法找到一个很好的解决方案来解决如何使用树类层次结构来处理habtm。 act-as-taggable-on强制代码知道我不想要的上下文。在这个网站和其他网站上已经多次询问过这个问题,但实际上还没有完整的答案。

基本上我有一组具有单级层次结构的类别:

  • 根类别1
    • 子类别3
    • 子类别4
  • 根类别2
    • 子类别5
    • 子类别6

表单部分稍微简单一些。我列出了所有的根类别,然后为每个类别找到了孩子。这仅适用于单级层次结构,并不适合我的需求,因为我宁愿接近无限级别(即对嵌套级别无关紧要的解决方案),但如果它增加太多复杂性则不必要。

主要是因为我不确定如何继续。此时我可以获得关联类别的简单哈希,但没有层次结构。我见过的嵌套类别解决方案不适用于habtm上下文,而是使用完整的树本身。

1 个答案:

答案 0 :(得分:0)

好吧,这不是那么明显,但Ancestry(又名has_ancestry:https://github.com/stefankroes/ancestry)管理得非常好。

我的模型的产品包含HABTM关系中的类别。类别是has_ancestry的层次结构。

一旦我获得了产品的类别,就可以在集合上调用安排:

  

@ product.categories.arrange.each do | root_cats,sub_cats |

精彩地工作。

简而言之,anwer是祖先的宝石:https://github.com/stefankroes/ancestry