这是数据结构的样子
{
#<Forum id: 16, name: "Parent 1", ancestry: "7", display_order: 1> =>{},
#<Forum id: 17, name: "Parent 2", ancestry: "7", display_order: 2> =>{},
#<Forum id: 13, name: "Parent 3", ancestry: "7", display_order: 3> =>
{
#<Forum id: 14, name: "Child 1", ancestry: "7/13", display_order: 1> =>{},
#<Forum id: 15, name: "Child 2", ancestry: "7/13", display_order: 2> =>
{
#<Forum id: 18, name: "Grand Child", ancestry: "7/13/15", display_order: 1> =>{},
}
}
}
当我使用下面的代码遍历该数据时,父节点是唯一最终被渲染到屏幕的节点。
<% forum.descendants.arrange(:order => :display_order).map do |forum,key| %>
<%= render :partial => 'forum', :locals => {:forum => forum} %>
<% end %>
如何渲染子节点?我知道它们可以通过“key”变量访问,但我不知道如何判断“key”变量何时具有我可以呈现的数据以及如何输出该数据。有什么建议吗?
答案 0 :(得分:1)
您可以通过key.is_a?(Hash)
检查密钥是否为哈希值。
在您的示例中,它将始终评估为true,因为{}
是一个空哈希。您可以使用key.empty?
要遍历嵌套哈希,您可以递归地执行此类
def display hash
hash.each do |key, val|
# print key etc
if val.is_a?(Hash)
display val
else
# print value or whatever operation you want
end
end
end