Мне нужно отобразить структуру вложенных наборов в 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, который выгружает для меня всю древовидную структуру, хотя это работает.





Я не уверен, что это лучшая практика, но я использовал аналогичный код для рендеринга дерева проекта.
Более быстрая альтернатива - создать вспомогательный метод, выполняющий ту же работу (рекурсивный обход дерева и добавление частичных строк в строку результата). Это немного в стиле PHP :( но для такого небольшого количества HTML все в порядке, я думаю :)
Помощник выглядит так:
def render_node(node)
res = "<ul>"
...
node.items.each {|n| res << render_node(n)}
...
res << "</ul>"
res
end
Затем он используется так:
<%=render_node ProjectTree.new%>
Что ж, вы должны понимать, что есть (небольшие) накладные расходы на использование частичных файлов, поэтому, если производительность является проблемой, вы можете не захотеть их использовать так часто. В противном случае я не вижу особых проблем с этим.
Тем не менее, вы можете захотеть использовать вариант сбора частичных файлов (см. «Визуализация коллекции частичных файлов» на этой странице API, это может немного очистить ваш код.