2011-02-25 126 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