2011-02-25 125 views
4

我有具有以下結構輸出深層嵌套的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 

在我的JSON輸出

現在,我試圖讓一個用戶,他們的任務,每個任務位置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]) 

您會看到執行一些查詢。第一個將檢索用戶,第二個檢索相關任務,第三個檢索相關位置,第四個檢索相關人員。您會注意到,當您鍵入以下任何內容時,不會執行任何查詢:

@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 2011-02-25 20:39:38

+0

我得到了答案Pan,raw @ user.to_json(:include => [:tasks,:location ...] – pedalpete 2011-02-25 20:51:20

+0

很高興能幫到你。 – 2011-02-25 21:11:42