Это лучшая практика для достижения рекурсии через частичное? - PullRequest
2 голосов
/ 31 октября 2008

У меня есть необходимость отобразить структуру вложенного набора в 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 ]

2 голосов
/ 31 октября 2008

Я не уверен, что это лучшая практика, но я использовал похожий код для рендеринга дерева проекта.

Более быстрой альтернативой является создание вспомогательного метода, выполняющего ту же работу (рекурсивный обход дерева и добавление частичных строк в строку результата). Это немного стиль PHP :( но для такого небольшого количества HTML это нормально, я думаю :)

Помощник выглядит так:

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

Тогда это используется так:

<%=render_node ProjectTree.new%>
0 голосов
/ 31 октября 2008

Ну, вы должны понимать, что есть (небольшие) накладные расходы на использование партиалов, поэтому, если производительность является проблемой, вы можете не захотеть использовать их так много. В противном случае я вижу небольшую проблему с использованием этого.

Тем не менее, вы можете использовать вариант коллекции partials (см. «Отображение коллекции partials» на этой странице API , это может немного очистить ваш код.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...