2011-01-11 42 views
7

我的設置:Rails 2.3.10,Ruby 1.8.7JSON包含語法

我在幾個模型之間有一套相當複雜的關係。

class A 
    has_many :classB 
    has_many :classD 
end 

class B 
    belongs_to :classA 
    has_many :classC 
end 

class C 
    belongs_to :classB 
    belongs_to :classE 
end 

class D 
    belongs_to :classA 
    belongs_to :classE 
end 

class E 
    has_many :classD 
    has_many :classC 
end 

我遇到了JSON語法問題,以獲取以classA開頭的所有相關信息。這是我迄今爲止的工作。

classA.to_json(:include => {:classB => {:include => [:classC, :classE]}}) 

我無法獲得語法工作還包括classD和相關的classE記錄。

UPDATE其實這樣的事情可能只是我不能混用,我沒有在我的示例代碼中使用單/複數以上的散列和數組

classA.to_json(:include => [ :classB => { :include => { :classC => { :include => :classE } } }, 
          :classD, :classE ]) 

注意,但在我真正的代碼工作, 我是。任何見解將不勝感激。

感謝, 鮑勃

+0

我想`classA`是類的一個對象* * * A *? – iconoclast 2013-12-23 15:26:28

回答

13

這應該工作:

classA.to_json(:include => { 
    :classB => {:include => {:classC => {:include => :classE}}}, 
    :classD => {}, 
    :classE => {}, 
}) 
1

我不知道,如果你想CLASSE包括通過兩個C類和D類但這應該工作:

classA.to_json(:include => { :classB => { :include => { :classC => { :include => :classE } } }, 
          :classD => { :include => :classE } }) 

編輯:

class A 
    has_many :bs 
    has_many :ds 
end 

class B 
    belongs_to :a 
    has_many :cs 
end 

class C 
    belongs_to :b 
    belongs_to :e 
end 

class D 
    belongs_to :a 
    belongs_to :e 
end 

class E 
    has_many :ds 
    has_many :cs 
end 

@class_a = A.first 
@class_a.to_json(:include => { :bs => { :include => { :cs => { :include => :e } } }, 
           :ds => { :include => :e } }) 
+1

我已經嘗試過這個,它會拋出這個不倫不類的錯誤「未定義的方法宏」爲零:NilClass「 – Bob 2011-01-11 04:09:03

+0

好吧,那麼只是爲了確保,我認爲classA實際上不是模型,而是classA的一個實例,對嗎?之後,我會檢查你的關聯關係,在你的例子中你將belongs_to和has_many混合在一起,但是這個關聯就是例如classA。只要確保在關聯和to_json中使用匹配的單數/複數語法。 – DanneManne 2011-01-11 05:55:12

+0

你說得對,JSON行中的classA是一個實例,我沒有使用上面適當的單數/複數語法,但是在我的代碼中,我是。包括代碼應該都是複數。 – Bob 2011-01-11 06:07:06

0

嘗試這個,你應該只需要一個:include =>

classA.to_json(:include => {:classB => [:classC, { :classE => :classD }] })