2016-09-15 2 views
0

ancestry 보석과 함께 rails과 함께 최근에 시작되었습니다. I는 다른 카테고리 객체 link_to 유선, 버튼을 표시하기 위해, ancestry 일품 통해 트리 구조로 저장되어 Category 오브젝트의 배열을 반복하려하고if else 문을 사용한 루비 반복 ... (가계 보석과 함께)

은 특정 범주에 관한 것이다.

데이터베이스의 처음 세 범주는 뿌리이므로 결국 모든 하위 항목에 대한 단추를 표시 할 수있는 충분한 공간이보기에 없습니다. 그래서 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

자녀 카테고리는 부모와 어떤 관련이 있습니까? 테이블 parent_id이있는 categories 테이블을 가정합니다.

을 감안할 때 이러한 범주 : 이제

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

기본적으로 어떤 작업을했는지 ... 그러나 주어진 카테고리 개체의 ID를 기반으로 반복하는 방법을 알아 내려고 노력하고 있습니다 ... 귀하의 답변을 보내 주셔서 감사합니다. – jmcgillion

+0

'ancestry' 보석은 위에서 설명한대로 작동합니다. "주어진 카테고리의 ID를 기반으로 iterate through"로 무엇을 의미하는지 확신 할 수 없습니다. 'id'를 사용하면'category = Category.find id' 카테고리를 발견 할 수 있습니다. 그러면 ancestry gem이'children' 메소드'category.children'을줍니다. 개체 트리 탐색을위한 방법이 많이 있습니다. https://github.com/stefankroes/ancestry#navigating-your-tree – DiegoSalazar