2016-10-21 3 views
1

Wie kann ich Kategorien und Unterkategorien in Schienen anzeigen ausgeben? Wie folgt aus:Iterate Datensätze in Schienen Sicht und Controller

  • Erste Kategorie Name
    • Erste Kategorie Kind 1 Name
    • Erste Kategorie Kind 2 Name
    • Erste Kategorie Kind 3 Name
  • Zweiter Kategoriename
    • Zweite Kategorie Kind 1 Name
    • Zweite Kategorie Kind 2 Name
    • Zweite Kategorie Kind 3 Name

mein schema.rb:

mein categories_controller.rb

def show 
    @category = Category.find(params[:id]) 
    #child categories of current parent category 
    @child_categories = Category.where(parent_id: @category.id) 
    #subchild categories of current parent category 
    @child_categories.each do |category| 
     @subchild_categories = Category.where(parent_id: category.id) 
    end 
end 

mein show.html. erb

<% if @child_categories.any? %> 
<ul> 
<% @child_categories.each do |child| %> 
    <li> 
     <%= child.title %> 
     <ul> 
      <% @subchild_categories.each do |subchild| %> 
       <li><%= subchild.title %></li> 
      <% end %> 
     </ul> 
    </li> 
<% end %> 
</ul> 
<% end %> 

Jetzt bekomme ich so etwas wie dieses:

  • Erste Kategorie Name
    • Zweite Kategorie Kind 1 Name
    • Zweite Kategorie Kind 2 Name
    • Zweite Kategorie Kind 3 Name
  • Zweite Name Kategorie
    • Zweite Kategorie Kind 1 Name
    • Zweite Kategorie Kind 2 Name
    • Zweite Kategorie Kind 3 Name

Antwort

1
#try this:  

def show 
    @category = Category.find(params[:id]) 

    @child_categories = Category.where(parent_id: @category.id) 

    @subchild_categories = {} 
    @child_categories.each do |category| 
    @subchild_categories[category.title] = Category.where(parent_id: category.id) 
    end 
end 



#and in view: 

<% @child_categories.each do |child| %> 
    <li> 
     <%= child.title %> 
     <ul> 
      <% @subchild_categories[child.title].each do |subchild| %> 
       <li><%= subchild.title %></li> 
     <% end %> 
    </ul> 
    </li> 
<% end %> 
+0

Vielen Dank! Das funktioniert gut :) – Oleg

0

Sie können eine children Methode in Ihrem Category Modell erstellen, das where(parent_id: id) ruft und dann Sie es nur

def self.children 
    where(parent_id: id) 
end 

verwenden und dann können Sie es auf Sie so viel sehen, wie Sie wollen:

@category.children.each do |child_category| 
    child_category.children.each do |sub_child_category| 
    sub_child_category.children.each do |sub_sub_child_category| 
     // as much as you want to 
    end 
    end 
end 
Verwandte Themen