我有一个具有以下结构的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,期待的错误”。
写这个的正确方法是什么,所以我得到了这个用户的所有相关数据?
答案 0 :(得分:4)
您应该能够使用此命令获取用户和关联对象:
@user = User.includes(:tasks => {:location => :staff}).find(params[:id])
你会看到一些查询执行。第一个将检索用户,第二个将检索相关任务,第三个将检索相关位置,第四个将检索相关人员。您会注意到在键入以下任何内容时不会执行任何查询:
@user.tasks.first.location.staff
@user.tasks.first.location
@user.tasks.first