【问题标题】:Pattern for Modeling a Graph in Rails在 Rails 中建模图形的模式
【发布时间】:2012-08-16 09:49:35
【问题描述】:

我有一个数据结构,我希望在 Rails 中对其进行建模和持久化。它是自引用的,看起来很像一棵分层树,但是每个节点可以有多个父节点和多个子节点,而不是只有一个父节点。

它可能看起来像这样(所有节点都是相同的模型):

                       Foo            Bonk
                     |    |          |    |
                    Bar   Baz      Foo   Bork 
                   |   |
                 Baz   Bork

所有同名的节点实际上都是同一个节点。

我还想找到包含某种“成分”的模型的所有实例。

我找到的最接近的东西是https://github.com/mceachen/closure_tree,但据我所知,每个节点只有一个父节点。

理想情况下,我正在寻找一种使用 ActiveRecord 实现的模式,但会考虑任何解决方案。

【问题讨论】:

    标签: ruby-on-rails ruby activerecord tree


    【解决方案1】:

    对于每个只有一个父节点的节点,这是一个很好的方法:

    has_many :children, :class_name => "Node", :foreign_key => "parent_id"
    belongs_to :parent, :class_name => "Node", :foreign_key => "parent_id"
    

    如您所知,它是一个 ActiveRecord 模型,其中一个名为 parent_id 的字段指向父节点。

    对于多个父级,这可以扩展为创建多对多自引用连接。

    has_and_belongs_to_many :children, :class_name => "Node",
        :foreign_key => "node_id",
        :association_foreign_key => "children_id",
        :join_table => "children_nodes"
    

    创建连接表,现在你应该可以为父母做 Node.children 和 Node.nodes 了。 注意:第二部分没有测试,如果不行请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多