2011-01-11 13 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 

classAで始まるすべての関連情報を取得するためにJSON構文に問題があります。これまで私が働いてきたことは次のとおりです。

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

classDと関連するclassEレコードも含めるようにする構文を取得できません。

UPDATE実際にこのようなものは、私は上記の私のコード例では単数/複数を使用していませんでしたハッシュと配列

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

注意を混在させないことを除いて私の実際のコードに働くかもしれません、 わたし。どんな洞察も高く評価されます。

おかげで、 ボブ

+0

を私は* * classA'は、クラスの*オブジェクト* 'であると仮定しますか? – iconoclast

答えて

13

これは動作するはずです:

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

これはうまくいきました。同じ結論に至りました。 – Bob

+0

あるレベルで複数の関係があり、少なくとも1つにサブインクルードがある場合は、=> {}を追加する必要があるようです – Parrots

1

あなたはCLASSEは、両方のクラスCとclassDを通じて含まれているが、これは動作するはずですしたい場合、私は知らない。

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

EDIT:

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

これを前に試してみましたが、この無名のエラー "nilのための未定義のメソッド' macro 'を投げます: – Bob

+0

さて、確かに、私はclassAが実際にモデルではなくクラスAのインスタンスであると仮定します。その後、私は、あなたの例では、belongs_toとhas_manyを混ぜ合わせてあなたの関係を調べるでしょうが、その関連付けは単にclassAという名前になります。あなたの関連とto_jsonで一致する単数形/複数形の構文を使用するようにしてください。 – DanneManne

+0

JSON行のclassAがインスタンスで、上記の適切な単数形/複数形構文を使用していませんが、私のコードでは、私はそうです。 :includeコードはすべて複数形でなければなりません。 – Bob

0

てみてくださいこれは1つだけ必要です:include =>

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

これは「配列をハッシュに変換できません」というエラーをスローします。 – Bob

関連する問題