2014-05-02 40 views
1

我試圖與父母做一個類別系統。這裏是我的數據庫結構。
- ID
- 姓名
- PARENT_ID你如何遞解如果語句

基本上我希望它做的是檢查是否有父ID,如果是這樣,然後檢查是否父ID,並且如果父母有一個父ID , 等等。然後輸出父母直到它到達孩子。

我在做什麼當前(以紅寶石/ Ruby on Rails的)是這樣的:

<% @cat = Category.find_by_id(@project.category) %> 
<% if @cat.parent_id.nil? %> 
    <%= @cat %> 
<% else %> 
    <%= Category.find_by_id(@cat.parent_id).name%> => <%= @cat.name %> 
<% end %> 

這裏的問題是,它只是變得一個父。我需要它緩和,並不斷收集父母直到它結束,,我也不希望它佔用太多的內存。任何幫助,將不勝感激。謝謝! :)

+1

好..寫一個輔助方法... –

+2

如果您使用[祖先](https://github.com/stefankroes/ancestry)寶石,你會得到大量的輔助方法來尋找父母,祖先,孩子等等。 – jstim

+0

@jstim這很容易..寫一個..所以我認爲沒有必要得到一個寶石..但它的個人選擇.. –

回答

2

添加一個方法,你的模型來搜索父

class Category 
    # inline, less memory usage 
    def last_parent 
    last = self 
    while last.parent 
     last = last.parent 
    end 
    last 
    end 

    # recursive, better readability 
    def last_parent_recursive 
    if parent 
     parent.last_parent_recursive 
    else 
     self 
    end 
    end 
end 

然後,在你的看法:

<%= @cat.last_parent %> 
+0

謝謝!快速提問:爲什麼子類別具有'--',即使它不在代碼中? – nahtnam

+0

@nahtnam對不起,沒有你的問題:( – fotanus

+0

@nahtnam,如果你試圖更好地解釋我可能會提供幫助 – fotanus