вывод глубоко вложенных JSON-ассоциаций - PullRequest
4 голосов
/ 25 февраля 2011

У меня есть приложение 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 Ответ

4 голосов
/ 25 февраля 2011

Вы должны быть в состоянии получить пользователя и связанные объекты, используя эту команду:

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

Вы увидите выполнение нескольких запросов. Первый извлекает пользователя, второй - связанные задачи, третий - связанные местоположения, а четвертый - связанный персонал. Вы заметите, что никакие запросы не выполняются при вводе любого из следующего:

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