2016-09-15 62 views
0

最近開始使用rails以及ancestry寶石第一次。使用if else語句在紅寶石中進行迭代...(沿着祖先的寶石)

我試圖通過其經由ancestry寶石存儲在樹結構Category對象的數組來迭代,以便顯示按鈕,有線到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_idnil,看它是否是一個父類與否,我們將添加一個自我指涉的關聯和範圍的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 ... tx爲您的響應迭戈,這是表示讚賞... – jmcgillion

+0

'祖先'寶石完全按照我上面解釋。不確定你的意思是「通過基於給定類別的id進行迭代」。有了'id',你可以找到一個類別'category = Category.find id',然後祖先寶石給你'children'方法'category.children'。它有一堆用於導航對象樹的方法https://github.com/stefankroes/ancestry#navigating-your-tree – DiegoSalazar