2016-09-15 6 views
0

Недавно начато с rails вместе с драгоценным камнем ancestry.Итерация в рубине с использованием инструкции if else ... (вдоль жемчуга родословной)

Я пытаюсь перебирать массив Category объектов, которые хранятся в виде древовидной структуры с помощью ancestry камня, чтобы отобразить кнопки, телеграфировало link_to к других объектов категории, данная категория связана.

Первые 3 категории в базе данных - это корни, и поэтому в конечном итоге у меня не будет достаточно места для отображения кнопок для всех потомков. Итак, если category.parent == 'nil', я хотел бы отображать только дочерние объекты данной категории.

Однако для всех других объектов категории я хотел бы отобразить всех потомков данной категории.

я что-то вдоль этих линий думать, чтобы перебирать

<%= current_user.folders.each do |folder| %> 
    <% if folder.is_root? %> 
    <% folder.children.each do |child| %> 
     <%= link_to child, folder_path(child), class: 'btn' %> 
    <% end %> 
    <% else %> 
    <% folder.descendants.each do |desc| %> 
     <%= link_to desc, folder_path(desc), class: 'btn' %> 
    <% end %> 
<% end %> 

ли кто-нибудь сможет посоветовать?

ответ

1

Как ваши категории детей относятся к их родителям? Предположим, что таблица categories имеет столбец parent_id.

Учитывая эти категории:

parent_category = Category.create! 
child_category1 = Category.create! parent_id: parent_category.id 
child_category2 = Category.create! parent_id: parent_category.id 

Теперь вы можете проверить, если parent_id является nil, чтобы увидеть, если это Родительская категория или нет, мы добавим самосправочную ассоциацию и простор Category модели :

class Category < ActiveRecord::Base 
    scope :parents, -> { where(parent_id: nil).joins :children } 
    has_many :children, class_name: "Category", foreign_key: :parent_id 
end 

Теперь вы можете перебрать родитель и перебирать каждый родитель детьми:

Category.parents.each do |parent| 
    parent.children.each do |child| 
    # code 
    end 
end 
+0

Я пытаюсь использовать родословную для создания древовидной структуры ... – jmcgillion

+0

Что я в основном сделал ... но мне сложно определить, как итерации на основе идентификатора заданного объекта категории ... tx для вашего ответа diego, это оценено ... – jmcgillion

+0

Драгоценность 'ancestry' работает точно так, как я объяснил выше. Не уверен, что вы подразумеваете под «итерацией через идентификатор определенной категории». С идентификатором 'id' вы можете найти категорию' category = Category.find id', а затем родословная gem дает вам метод 'children'' category.children'. У этого есть куча методов для навигации по вашему дереву объектов https://github.com/stefankroes/ancestry#navigating-your-tree – DiegoSalazar

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

  • Нет связанных вопросов^_^