x無法存取,你可能沒有權限或未登入。
Ae2f9b4a14f7d9b08c1e26b02952f0cd

問題:model的規劃

2012-01-03 17:33:51 +0800RexableRuby on Rails 節點 中發起
最後由 tonytonyjan2012-01-14 01:16:30 +0800回應 , 342次閱讀

現在想要設計一種graph結構的model,這個graph會有很多node和edge,而node和edge又各自有幾個分類,第一個問題是,node和edge的「類別」這個欄位,是不是用string這個type,再加上Validations的限制就好了嗎?因為用integer感覺以後會不容易看懂,而且用string應該對效能影響不大吧?

第二個問題:每個edge應該是正好有兩個node,請問應該怎麼規劃這個部分?graph有很多個(has_many)node和edge,node也有很多個(has_many)edge都沒問題,不過edge和node的關係就不知道該怎麼弄了。

截至 2012-01-14 01:16:30 +0800,共收到 8 條回應
19e786a2a74377ff6e052d87fd8d1fa8
xdite 1樓, 於2012-01-03 18:17:24 +0800回應

可不可以請你畫示意圖解釋?

Ae2f9b4a14f7d9b08c1e26b02952f0cd
Rexable 2樓, 於2012-01-03 19:52:10 +0800回應

#1樓 @xdite
http://plus.google.com/photos/116602282829089893365/albums/5693369423316211153?authkey=CJThg_q9zP7YpwE

大概是這樣的感覺吧?有問題的部分是被問號夾著的那裡,每個edge都只會有一個starting node,也只會有一個ending node,用has_many感覺怪怪的。

Ae2f9b4a14f7d9b08c1e26b02952f0cd
Rexable 3樓, 於2012-01-03 19:53:02 +0800回應

另外我剛剛嘗試用上傳圖片的功能,但是圖都沒有出來orz

19e786a2a74377ff6e052d87fd8d1fa8
xdite 4樓, 於2012-01-03 20:22:32 +0800回應

目前上傳圖片還是爛的。你可能要先貼到其他地方去

Ae2f9b4a14f7d9b08c1e26b02952f0cd
Rexable 5樓, 於2012-01-04 01:05:11 +0800回應

想到一個折衷的辦法了,因為我用到的edge都是單向的,所以只要保留到終點的referrence就好了。如果是有雙向邊,但兩個方向當成不同的邊也沒關係的話,也可以這樣做。不過如果有backtracking的需求的話可能會很麻煩……而且node也沒參考到指進來的edge。

1fe2e02a9933fa4f20adaf8ce2488d5d
scriptfans 6樓, 於2012-01-11 10:39:17 +0800回應

我的项目也有这个需求,至于类型,可以参考rails的单表继承,以及多态关联。
连线与节点的关系,因为是有向的,你可以把节点分为两类,即入、出两种。
class Edge
belongs_to :from, :class_name => 'Node'
belongs_to :to, :class_name => 'Node'
end

class Node
has_many :in_edges, :class_name => 'Edge', :foreign_key => :to_id
has_many :out_edges, :class_name => 'Edge', :foreign_key => :from_id
end

希望能帮到你XD。话说,我常看到对岸的朋友打“XD”这个符号,是“兄弟”的拼音首字母缩写么?求证:)

Ae2f9b4a14f7d9b08c1e26b02952f0cd
Rexable 7樓, 於2012-01-11 12:14:38 +0800回應

喔喔,原來還有這種用法,受教了。
另外,關於XD,很可惜你猜錯了XD,這是表示大笑的表情符號,大概就比:)誇張一點的笑法這樣。

需要 登入 後方可回應,如果你還沒有帳號按這裡 註冊