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これは機能しますが、オブジェクトにツリー構造全体をダンプするメソッドが必要なように「感じます」 。

4

2 に答える 2

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%>
于 2008-10-31T07:50:05.180 に答える
0

パーシャルを使用すると (わずかな) オーバーヘッドが発生することを認識しておく必要があります。そのため、パフォーマンスが問題になる場合は、パーシャルをそれほど使用したくない場合があります。そうでなければ、これを使用してもほとんど問題はありません。

ただし、パーシャルのコレクション バリアントを使用することもできます (この API ページの「パーシャルのコレクションのレンダリング」を参照)。これにより、コードが少しクリーンアップされる可能性があります。

于 2008-10-31T08:28:56.690 に答える