输出深层嵌套的json关联

时间:2011-02-25 19:30:58

标签: ruby-on-rails json associations

我有一个具有以下结构的rails3应用程序

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输出中,我正在尝试获取用户,他们的任务,每个任务位置以及位置人员和经理。

我有

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

这将输出用户和任务的位置,但不输出任务本身。

进一步包括我尝试添加,导致错误例如

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

我收到“意外的tASSOC,期待的错误”。

写这个的正确方法是什么,所以我得到了这个用户的所有相关数据?

1 个答案:

答案 0 :(得分:4)

您应该能够使用此命令获取用户和关联对象:

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

你会看到一些查询执行。第一个将检索用户,第二个将检索相关任务,第三个将检索相关位置,第四个将检索相关人员。您会注意到在键入以下任何内容时不会执行任何查询:

@user.tasks.first.location.staff
@user.tasks.first.location
@user.tasks.first