2015-08-26 2 views
1

Я есть модели, связанные следующим образом:Как получить все потомки объекта в Ruby On Rails

GrandParent 
    has_many :kids 
    has_many :grand_children, through: :kids 
Kid 
    belongs_to :grand_parent 
    has_many :grand_kids 
GrandKid 
    belongs_to :kid 

Я просто хотел бы назвать .descendants на объекте, и получить все объекты, которые принадлежат к его «линии».

Я думал, что использование драгоценного камня предков даст мне метод .descendants, который я хотел, но он только создает дополнительный индекс для одного класса, позволяя вам получать потомков внутри указанного класса. (Отлично подходит для таких вещей, как комментарии & ответов , но не полезно для моей проблемы). Мой код не является действительно необходимым для понимания проблемы, но здесь для тех, кто заинтересован: https://gist.github.com/bjlinville1/8425bfe88bc7060209e8

+1

Я бы предложил только сократить ваше сообщение до наименьшего количества кода, необходимого для понимания проблемы. Это хороший вопрос, но чрезмерные детали заставляют Q терять смысл. Вы _may_ хотите включить свой MVC-код в gisthub gist. – onebree

+1

Спасибо Хантеру, я отредактировал вопрос для ясности, и я сделал для него суть и включил упрощенный MVC. –

+0

Бен, если вы используете родословную, вам нужно будет создать только одну модель «Человек», а отношение внутри дерева определит, является ли экземпляр бабушкой, дедушкой, внуком и т. Д. – TwiceB

ответ

0

Я считаю, что вы неправильно интерпретируете драгоценность родословной. Похоже, вы ожидаете, что регион появится как ребенок Страны. Это правильно?

Восходящее полезно для дерева, как структуры (думаю, папки -> вложенных папок -> ребенок вложенных папок -> и т.д.)

Применение has_ancestry в рамках модели Country позволит создавать страны внутри страны. Но я не думаю, что это то, что вы ищете.

Независимо от этого, вы можете установить эти отношения, установив атрибут «parent_id» для страны при создании/обновлении его в контроллере. Просто установите его в идентификатор родительской страны. То же самое касается регионов, если вы хотите древовидную структуру регионов.

+0

Спасибо, это именно то, что я думал, что предки будут делать для меня. Я не уверен, что я последовал за тем, могу ли я использовать parent_ids для выполнения моих таблиц «предка-потомка», но теперь я начал работать, просто вручную кодируя каждое представление. Если вы - или кто-либо еще - знаете о хорошем сухом способе написать эту таблицу, чтобы я мог использовать ее на нескольких страницах «потомков», я был бы очень благодарен вам. –

+0

У вас есть «региональный» контроллер с реализацией «шоу»? – TwiceB

+0

Я обновил исходный вопрос, включив в него контроллер регионов и регион show.html.haml –