【问题标题】:Many to Many self reference ruby-on-rails多对多自引用 ruby​​-on-rails
【发布时间】:2011-11-11 15:14:28
【问题描述】:

这是我在社区的第一篇文章,有一个问题:表示类别树。

第一个解决方案:每个类别都有对其父类别的引用。 这个解决方案的问题是,当我想要一个类别的子树时,我必须多次查询数据库,树的每个级别(高度)一个查询,我想要一些更优化的解决方案。

选择的解决方案:类别(id、名称、描述)和 CategoryxCategory (ancestor_id, descendant_id) 所以要构建一个子树,我只需要一个这样的查询,

 select * from category a, categoryxcategory b.where b.ancestor_id = 1 and 
 b.descendant_id = a.id , gets all sub-categories of the category with id = 1.

我已经在java中使用hibernate完成了这个解决方案,但是我在Rails中做不到,我如何在迁移和ActiveRecord中指定这个?

非常感谢

【问题讨论】:

    标签: ruby-on-rails activerecord model


    【解决方案1】:

    难道不能只将祖先 ID 和后代 ID 作为类别中的列吗?

    这是一个受欢迎的宝石,可以为你造树https://github.com/collectiveidea/awesome_nested_set

    【讨论】:

    • 实际上我不能,因为我想在数据库中使用单个查询构建一个子树,执行此解决方案我必须查询数据库多次才能获得子树height > 2. 我会试试这个 gem
    • 只是为了完成这个话题,真正帮助我的是Ancestry,它完全符合我的要求。感谢您的帮助
    【解决方案2】:

    还有另一种模式:嵌套集,它在读取时非常高效,但如果您更新大树/插入/重新排序,则不会。看看nested_set gem here。自引用 many2many 本质上是一个图,这意味着,如果您不小心,最终可能会出现损坏的树(即具有多个父节点的节点)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多