2011-02-25 2 views
4

내 JSON 출력에서 ​​지금 출력 중첩 JSON 협회는

 
Users 
    has_many :tasks 
    has_many :staff 
    has_many :managers 

Tasks 
    has_one :location 

Locations 
    has_many :staff 
    has_one :manager 

Staff 
    belongs_to :users 
    belongs_to :location 

Managers 
    belongs_to :users 
    belongs_to :location 

, 나는이 사용자 자신의 작업, 각 작업 위치를 얻기 위해 노력하고있어 다음과 같은 구조의 rails3 응용 프로그램을 얻고, 한 위치 직원 및 매니저.

나는

 
@User = User.find(params[:id], :include{:tasks=>:location}) 

이 사용자와 작업의 위치를 ​​출력

을 가지고 있지만 작업 자체했습니다.

그리고 어떤 추가 내가 예를 들어 오류가 추가 될하려고 포함

 
@User = User.find(params[:id], :include{:tasks=>:location=>:staff}) 

나는} 기대, 예상하지 못한 tASSOC "의 오류가 발생합니다.

이를 작성하는 올바른 방법은 무엇입니까 그래서 나는이 사용자에 대한 모든 관련 데이터를 얻을 수

답변

4

당신이 명령을 사용하여 사용자 및 관련 개체를 얻을 수 있어야합니다 :

@user = User.includes(:tasks => {:location => :staff}).find(params[:id]) 
0123을

몇 가지 쿼리가 실행됩니다. 첫 번째는 사용자, 두 번째는 관련 작업, 세 번째는 관련 위치, 네 번째는 관련 직원을 검색합니다. 다음 중 하나를 입력 할 때 아무 쿼리도 실행되지 않습니다.

@user.tasks.first.location.staff 
@user.tasks.first.location 
@user.tasks.first 
+0

감사합니다.이 부분은 저에게있어 (생각합니다). 하지만 raw @ user.to_json을 출력 할 때만 사용자를 얻습니다. raw @ user.to_json (: include => tasks)을 출력하면 사용자 작업을 얻습니다. @ user.to_json (: include => : tasks, : include => : location)을 출력 할 때 위치 만 가져옵니다. 모든 산출물을 얻으려면 어떻게해야합니까? – pedalpete

+0

답변 : Pan, raw @ user.to_json (: include => [: tasks, : location ...] – pedalpete

+0

기꺼이 도와 드리겠습니다. –