我想使用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>
答案 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)