为什么我的helper递归方法不返回每个值?

我想显示一个用gem祖先管理的类别树。

我想使用一个帮助器,它将递归遍历树并逐个返回类别,目前没有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 = "
#{category.name}" if category.has_children? category.children.each do |sub_category| tree += "#{display_tree(sub_category)}" end end tree += "
" end end

这给了我:

  
Sport
Men
Women
Indoor
Children
Water sport
Beauty
Automobile
Garage

但该html未被解释,并且显示的网页中显示相同的代码。 我的意思是,我明白了

我可能错过了一些东西……也许是知识oO

谢谢

您正在使用的方法将只返回一个值(实际上第一次调用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 
  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 += "
" tree.html_safe #That was missing to interprete the html returned... end end

我回答我的上一个编辑问题。 我不得不添加这一行:

 tree.html_safe 

解释字符串。

谢谢