如何为祖先树视图呈现嵌套的ul列表

时间:2012-11-27 06:59:11

标签: ruby-on-rails-3 ancestry content-tag

我想使用content_tag渲染下面显示的结构,其中集合是祖先对象。

  <ul>
    <li>
       <a>Fruits</a>
     <ul>
       <li>
         <a>Apple</a>
        </li>
        <li>
            <a>Orange</a>
        </li>
      </ul>
     </li>
     <li>
        <a>Colours</a>
     </li>
   </ul>

2 个答案:

答案 0 :(得分:5)

如果错误的话,我相信这是答案,社区,请编辑和调整这篇文章。

创建一个像这样的辅助方法

def nested_groups(groups)
   content_tag(:ul) do
      groups.map do |group, sub_groups|
         content_tag(:li, group.name +  nested_groups(sub_groups))
      end.join.html_safe
   end  
end

然后,将祖先对象传递给视图中的方法:

<%= nested_groups(@groups.arrange) %>

它将以正确的方式呈现ul列表。

答案 1 :(得分:3)

以下代码将生成一个正确嵌套的列表。例如,请参阅W3schools

首先创建一个帮手:

module AttributeHelper
  def nested_attributes(attributes)
    content_tag :ul do
        attributes.each do |attribute|
            concat(content_tag(:li, attribute.name))
            if attribute.has_children? 
                concat(nested_attributes(attribute.children))
            end
        end
    end
  end
end

然后在视图中使用辅助方法:

= nested_attributes(@attributes.roots)