2011-06-03 110 views
1

目前,我正在努力,使嵌套類型的對象模型工作,我很好奇,我將如何使用Rails處理這個3.Rails包含自己的3個模型?

基本上,我有以下幾點:

  • 斷言
  • Expression_Group
  • 表達式

斷言由1-N Expression_Groups組成。 Expression_Groups由1-N表達式組成。對於我來說,ORM的難處在於,Expression_Groups也可能由其他Expression_Groups組成。

想到一個SQL SELECT,並說我們正在構建WHERE子句。

((V > 2 AND X = 0) OR (Y > 2 OR (Z = 4 OR S <> 2))) 

當這樣的事情來看,我們可以把它分解,並說:

Z = 4 - Expression 
(Z = 4 OR S <> 2) - Expression Group 
(Y > 2 OR (Z = 4 OR S <> 2)) - Expression Group CONTAINING Expression AND Expression_Group 

等。我想要做的是給用戶建立這種結構的能力。我想使用Rails 3,並以這種方式構建我的模型,這樣我就不必使用自己的處理器,並且可以直接使用這些表單。

我知道如何設置每個關係,除了包含Expression_Groups的Expression_Groups。

任何想法?

回答

0

假設一個潛在一對多之間的關係ExpressionGroup的對象,這樣的關聯可能工作:

has_many :child_expression_groups, 
     :class_name => "ExpressionGroup", 
     :foreign_key => "parent_id", 
     :dependent => :destroy 

注意,這將需要一個新的領域 - parent_idexpression_groups表允許爲空,幷包含父代的ID ExpressionGroup(如果有父代)。

然後,您可以只檢索那些在你的系統有parent_id設置爲nil(或ExpressionGroup模型定義爲這樣的範圍內)得到的所有頂級表達羣體。

如果您需要更先進的處理(如使其成爲一個多對多,等等),考慮使用類似Ancestry

+0

我在我的expression_groups表中有一個parent_id,但我沒有像你那樣的關係。我會給你一個鏡頭。謝謝! – 2011-06-03 12:56:29

+0

太棒了,祝你好運!就像我說的,如果你想深入一點,我會強烈推薦使用提供更高抽象級別的東西(如Ancestry)。但如果你的需求很簡單,那麼像這樣的東西就足夠了:) – Jits 2011-06-03 13:09:11

0
+0

不,我沒有。我看到他們的例子,這會讓我相信我會把它放在我的Assertion類中,指向:ExpressionGroup。那是對的嗎?他們的例子是有道理的,但是當我把它與has_and_belongs_to_many的動機相提並論時,我無法將它串在一起。所以一個斷言具有ExpressionGroup並且屬於許多ExpressionGroups?或者這是否推斷ExpressionGroups屬於許多其他ExpressionGroups? – 2011-06-03 12:55:49

+0

如果我正確理解你的問題,ExpressionGroup'has_and_belongs_to_many:expression_groups'和'belongs_to:assertion'和'has_many:expressions',斷言'has_many:expression_groups',表達式'belongs_to:expression_group' – 2011-06-03 13:00:43

+0

我相信你總結了它好 - 現在我從你的描述中看到,你的意思是表達式組的has_and_belongs_to_many。我也會試試!謝謝! – 2011-06-03 13:04:01