2015-08-06 3 views
3

Извините за запутанное название, я не был уверен, как это сказать. Но у меня есть класс User, который имеет много projects. И класс Project имеет много wbs_items. Итак, как мне получить все wbs_items, которые принадлежат всем projects, принадлежащим одному пользователю?Как получить все дочерние объекты дочерних объектов объекта?

В идеале я хотел бы сделать:

current_user.projects.wbs_items 

Но это не работает.

+1

Какую ошибку вы получаете? Кроме того, разместите свои модели пользователей, проектов и wbs. – Lumbee

+0

Вы имеете в виду объекты внуков? – onebree

+0

Я не понимал, что это была вещь, но да – Snubber

ответ

4

я был в состоянии решить эту проблему, добавив следующую строку в моей модели:

has_many :wbs_items, :through => :projects 

Тогда я мог бы получить все wbs_items на делание:

current_user.wbs_items 
+0

Да, это самый распространенный образец в Rails. Если вы запустите это в консоли, он должен выплюнуть SQL-запросы, необходимые для извлечения объектов «gradchildren»: сначала он запускает запрос, чтобы получить все «project_ids» для этого «пользователя», затем он запускает второй запрос, чтобы получить все ' wbs_items' прикрепляется к любому из этих 'project_ids'. –

1
# User model 
has_many :projects 
has_many :wbs_items, through: :projects 

# this will return all wbs_items of the current user 
current_user.wbs_items 
0

Не видя кода, Я бы подумал, что ваш подход может выглядеть следующим образом:

  1. Создание хэш для проекта/wbs_items отношений: проекты => [array_of_wbs_items]
  2. перебрать пользователей и назначить wbs_items на основе отрываясь проекта в проекте/wbs_items хэш
+1

kjmagic13 имеет правильную идею. – grenierm5

Смежные вопросы