2011-01-11 2 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'는 클래스의 * 객체 *는 * A *인가? – iconoclast

답변

13

이 작동합니다 : I 가정

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

그래, 저도 똑같은 결론을 내 렸습니다. – Bob

+0

위로 가기 투표하기 - => {}은 레벨에 여러 개의 관계가 있고 적어도 하나의 하위 관계에 레벨이있는 ​​경우 필요합니다. – Parrots

1

당신이 클라스 두 클래스 C와 classD을 포함하지만이 작업을해야 할 경우 나도 몰라 :

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

나는이 전에 시도한 및이 nondescript 오류 nil "정의되지 않은 메서드'매크로 'throw합니다 : NilClass" – Bob

+0

좋아요, 그럼, 그냥 classA 실제 model.classa, 인스턴스가 아닌 가정합니다? 그리고 나서, 예를 들어서 belongs_to와 has_many를 섞어서 연관성을 검사 하겠지만, 연관성은 단지 classA로 명명됩니다. 연관과 to_json에서 일치하는 단수/복수 구문을 사용해야합니다. – DanneManne

+0

JSON 라인의 classA가 인스턴스이고 위의 적절한 단수/복수 구문을 사용하지 않지만 코드에서는 그렇습니다. 포함 코드는 모두 복수형이어야합니다. – Bob

0

시도를 이 중 하나만 필요합니다. :include => :

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

이것은 "배열을 해시로 변환 할 수 없습니다"라는 오류가 발생합니다. – Bob