我需要在HTML中显示嵌套的set结构。我正在做以下部分:
<ul<%= ' id="tree"' if depth == 0 %>>
<% items.each do |item| %>
<li id="node_<%= item.id %>"><a><%= item.name %></a>
<% if item.has_children? %>
<%= render :partial => 'tree_level', :locals => {:items => item.children, :depth => depth + 1} %>
<% end %>
</li>
<% end %>
</ul>
这是获得代码的最佳位置吗?我“感觉”就像对象上应该有一个to_html
方法,它会为我转储整个树结构,尽管这样可行。
答案 0 :(得分:2)
我不确定这是否是最佳做法,但我使用类似的代码来渲染项目树。
更快的替代方法是创建执行相同作业的辅助方法(递归遍历树并将部分字符串添加到结果字符串中)。它有点PHP风格:(但对于如此少量的HTML,它可以,我猜:)
助手看起来像:
def render_node(node)
res = "<ul>"
...
node.items.each {|n| res << render_node(n)}
...
res << "</ul>"
res
end
然后就像这样使用:
<%=render_node ProjectTree.new%>
答案 1 :(得分:0)
好吧,你应该意识到使用partials有一个(小)开销,所以如果性能是一个问题,你可能不想这么用它们。否则我发现使用它有点问题。
但是,您可能希望使用部分的集合变体(请参阅“渲染部分集合”on this API page,它可能会稍微清理您的代码。