2

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

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

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

其中所有具有相同名称的节点实际上是同一个节点。

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

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

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

4

1 回答 1

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。注意:第二部分尚未测试,但如果它不起作用,请告诉我。

于 2012-08-16T01:49:35.990 回答