Rails helper方法:嵌套哈希到嵌套HTML列表

gjb*_*gjb 3 ruby ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2

我正在尝试编写一个Rails帮助器方法,将嵌套的哈希转换为嵌套的HTML列表.

例如:

{
  :parent => "foo",
  :children => [
    {
      :parent => "bar",
      :children => [
        {
          :parent => "baz",
          :children => []
        }
      ]
    }
  ]
}
Run Code Online (Sandbox Code Playgroud)

应成为:

<ul>
  <li>foo</li>
  <ul>
    <li>bar</li>
    <ul>
      <li>baz</li>
    </ul>
  </ul>
</ul>
Run Code Online (Sandbox Code Playgroud)

散列可以具有任意数量的级别,以及每个级别的任意数量的父级.

请问最好的方法是什么?

Zac*_*emp 5

您可以使用递归方法渲染以散列到嵌套的列表集.将其放在您的相关帮助者中:

def hash_list_tag(hash)
  html = content_tag(:ul) {
    ul_contents = ""
    ul_contents << content_tag(:li, hash[:parent])
    hash[:children].each do |child|
      ul_contents << hash_list_tag(child)
    end

    ul_contents.html_safe
  }.html_safe
end
Run Code Online (Sandbox Code Playgroud)