2013-12-18 77 views
0

我試圖在Rails 4中建模鏈接和節點。鏈接可以有兩個節點(源節點和目標節點)。節點可以屬於多個鏈接。我在我的鏈接模型中寫了這個。在rails 4中創建關係(一個模型可以屬於多個其他模型)

class Links < ActiveRecord::Base 
    has_one :source_node, class_name: 'Node' 
    has_one :target_node, class_name: 'Node' 

end 

我爲我的節點類寫了這個。它是否正確?

class Nodes < ActiveRecord::Base 
    belongs_to :link 


end 
+0

你爲什麼問這是否正確?設計由你決定。正確或錯誤取決於你期望的結果,如果你有這個結果。 – givanse

+0

這是什麼問題? – Gjaldon

回答

1
  • SN - 源節點
  • TN - 目標節點
  • L - 鏈接

的用例鏈接:

SN - L - TN 
SN - L 
    L - TN 
    L 

一個鏈接有一個源節點。

一個鏈接有一個目標節點。

的用例的節點:

 L3 
     | 
L1 - SN - L2 
     | 
    L4 

一個節點有很多鏈接。

所以:

class Links < ActiveRecord::Base 
    belongs_to :source_node, class_name: 'Node' // didn't use has_one* 
    belongs_to :target_node, class_name: 'Node' 
end 

class Nodes < ActiveRecord::Base 
    has_many :links 
end 

使用belongs_to的,而不是HAS_ONE的原因是因爲鏈接將有外鍵節點。

如果關係是以相反的方式定義會怎樣?其中節點具有外鍵(belongs_to)和鏈接(has_one)的每種類型的節點。使用該設計,您需要爲節點模型中的N個鏈接定義一個字段link_N_id

的問題是:

  • 您必須手動添加N個字段的N條鏈路。
  • 關係被限制爲每個節點最多N個。
+1

has_many:鏈接 –

相關問題