Desidero visualizzare un albero di categorie gestite con la discendenza della gemma.Perché il mio metodo ricorsivo da helper non restituisce ogni valore?
Vorrei utilizzare un helper che ricorsivamente passerà attraverso l'albero e restituirà le categorie una per una, per il momento senza tag o contenuti html.
module CategoriesHelper
def display_tree(category)
if category.has_children?
category.children.each do |sub_category|
display_tree(sub_category)
puts(sub_category.name) # to check if it goes here
end
end
category.name
end
end
L'argomento category
è una delle categorie di root.
Cosa deve restituire?
- Nella pagina web: Esso mostra solo la categoria livello principale
Sport Beauty Automobile
- Nella console:
Men Indoor Women Children Water sport Garage
Se li ottenere, allora vuol dire che le opere ricorsione, ma non lo fa . Perché restituisce solo la prima iterazione?
Inoltre vorrei farli nel seguente ordine:
root/child/child-of-child
ma se voglio tornare category.name
, dovrebbe essere in ultima posizione.
Potrebbe per favore darmi i vostri commenti?
PS: Ho appena scoperto (durante l'aggiunta di tag) che stavo usando la parola "ricorsività" per tutto il tempo le mie ricerche, ma non esiste, anche se molte persone lo usano sul stackOveflow; o) - > "ricorsione", ma comunque mi sono bloccato
** EDIT **
ora uso di questo codice:
module CategoriesHelper
def display_tree(category)
tree = "<div class =\"nested_category\">#{category.name}"
if category.has_children?
category.children.each do |sub_category|
tree += "#{display_tree(sub_category)}"
end
end
tree += "</div>"
end
end
che mi dà:
012. <div class ="nested_category">Sport
<div class ="nested_category">Men</div>
<div class ="nested_category">Women
<div class ="nested_category">Indoor</div>
</div>
<div class ="nested_category">Children</div>
<div class ="nested_category">Water sport</div>
</div>
<div class ="nested_category">Beauty</div>
<div class ="nested_category">Automobile
<div class ="nested_category">Garage</div>
</div>
Ma quell'html non viene interpretato e lo stesso codice viene mostrato nella pagina web visualizzata. Voglio dire che vedo
probabilmente ho perso qualcosa ... forse la conoscenza oO
Thx
Aggiungi il codice di vista che stai utilizzando per eseguire il rendering sul modello. Probabilmente ti manca il metodo raw() che racchiude il metodo display_tree() per evitare che Rails> = 3 scape automaticamente l'html. – robertodecurnex