2012-08-06 43 views
2

我有一個數據結構,我正在尋找模型並堅持使用rails。它是自引用的,並且看起來很像分層樹,但是不是每個節點只有一個父節點可以有多個父節點和多個子節點。用於在Rails中建模圖形的模式

它可能看起來像這樣(所有節點都是同一型號):

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

所有具有相同名稱的節點實際上是相同的節點。

我也想找到包含某種「成分」的模型的所有實例。

我發現的最接近的東西是https://github.com/mceachen/closure_tree但據我可以告訴每個節點只有一個父母。

我理想的是尋找一種模式來實現與ActiveRecord,但會考慮任何解決方案。

回答

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了。 注意:第二部分沒有經過測試,但讓我知道它是否無效。