2008-10-31 8 views
2

HTML에 중첩 된 세트 구조를 표시해야합니다. 나는 다음 부분과 함께 그것을하고있다 :부분 실행을 통해 재귀를 수행하는 것이 가장 좋은 방법입니까?

<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 메소드가 있어야하는 것처럼 느낍니다.

답변

2

모범 사례인지 여부는 잘 모르겠지만 프로젝트 트리 렌더링에 비슷한 코드를 사용했습니다.

가장 빠른 대안은 같은 작업을하는 도우미 메서드를 만드는 것입니다 (재귀 적으로 트리를 가로 지르고 부분 문자열을 결과 문자열에 추가하는 것). 이 같이 사용되는 다음

def render_node(node) 
    res = "<ul>" 
    ... 
    node.items.each {|n| res << render_node(n)} 
    ... 
    res << "</ul>" 
    res 
end 

:, 내가 좋아하는 :)

도우미 보이는 생각은 약간의 PHP 스타일이다 :(하지만 HTML의 이러한 작은 금액은 OK입니다

<%=render_node ProjectTree.new%> 
0

음, 퍼스널 부분을 사용하기위한 (작은) 오버 헤드가 있음을 알아야합니다. 따라서 성능이 문제가되는 경우 많이 사용하지 않을 수 있습니다. 그렇지 않으면 이걸 사용하는 데 거의 문제가 없습니다.

그러나, 그것은 당신의 코드를 조금 정리할 수 on this API page "부분 지문의 컬렉션을 렌더링"을 참조하십시오 (파셜의 컬렉션 변형을 사용할 수 있습니다.

관련 문제