我想显示一个用宝石祖先管理的类别树。
我想使用一个帮助器,它将递归遍历树并逐个返回类别,暂时没有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
category
参数是根类别之一。
它应该返回什么?
Sport Beauty Automobile
Men Indoor Women Children Water sport Garage
如果得到它们,则意味着递归有效,但事实并非如此。为什么它只返回第一次迭代?
此外,我想按以下顺序获取它们:
root/child/child-of-child
但如果我想返回category.name
,它应该在最后位置。
你能不能给我你的意见?
PS:我刚刚发现(在添加标签期间)我在搜索过程中一直使用“递归”一词,但它不存在,即使很多人在stackOveflow上使用它; o) - > “递归”,但我仍然被卡住了
**编辑**
现在我使用这段代码:
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
给了我:
<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>
但是没有解释html并且显示的网页中显示相同的代码。我的意思是我看到了
我可能错过了一些东西......也许是知识oO
THX
答案 0 :(得分:3)
您正在使用的方法只返回一个值(实际上是第一次调用category.name) 关于控制台,您将获得循环中的放置(这不是方法的返回值)。
尝试这个并让我知道是否还有一些不够清楚的事情:
module CategoriesHelper
def display_tree(category)
tree = category.name
if category.has_children?
category.children.each do |sub_category|
tree += "/#{display_tree(sub_category)}"
end
end
tree
end
end
答案 1 :(得分:0)
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>"
tree.html_safe #That was missing to interprete the html returned...
end
end
我回答我上次编辑的问题。我不得不添加这一行:
tree.html_safe
解释字符串。
THX