1

私はacts_as_treeを使用するCategoryモデルを持っています

class Category < ActiveRecord::Base
  acts_as_tree :order=>"name"
end

カテゴリツリーを表示するときは再帰を使用しますが、(一部のチェックボックスがオンになっているかどうかを除いて)毎回ほぼ同じ部分が生成されるため、多数のデータベース呼び出しが必要になります。

これをキャッシュしたいのですが、現時点で考えられるのは、Category.allを新しい非ActiveRecordデータ構造にダンプして、呼び出しの数を減らすことだけです。もっと良い方法はありますか?

index.html.erb

<%= render :partial=> "/categories/category_checkboxes", :locals=>{:select_categories=>@categories_ids} %>

_category_checkboxes.html.erb

<% @categories.each do |category| %>
    <h3><a href="#"><%=category.name%></a></h3>
    <div>
      <% category_children = category.children %>

      <%= render :partial => "/categories/category_checkbox_children",
                 :locals => { :child_categories => category_children, 
                              :chk_class=>chk_class, 
                              :select_categories=>select_categories } unless category_children.empty? %>
    </div>
<% end %>

_category_checkboxes_children.html.erb

<ul>
<% child_categories.each do |category| %>
  <li class= "category_check_box">
  <%=check_box_tag("category#{category.id}", 1, select_categories.index(category.id)%>
  <%=label_tag("category#{category.id}" ,"#{category.name}")%>
  <%= render :partial => "/categories/category_checkbox_children",  :locals => { 
                          :child_categories => category.children,
                          :select_categories=>select_categories} unless category_children.empty? %>
<% end %>
</li>
</ul>
4

1 に答える 1

1

宝石はacts_as_treeかなり時代遅れです。最後のバージョン ( 0.1.1 ) は 2010 年 2 月のもので、その機能はかなり制限されています。

同様の機能を提供し、さらに多くの機能を追加した gemである ancestryをご覧になることをお勧めします。具体的には、深度によるノードの選択に関するセクションをご覧ください。

于 2011-10-02T09:43:55.393 に答える